import {
	INodeProperties,
} from 'n8n-workflow';

export const metricOperations = [
	{
		displayName: 'Operation',
		name: 'operation',
		type: 'options',
		displayOptions: {
			show: {
				resource: [
					'metric',
				],
			},
		},
		options: [
			{
				name: 'Get',
				value: 'get',
				description: 'Retrieve financial metric broken down by day for either the current month or the last',
			},
		],
		default: 'get',
		description: 'The operation to perform.',
	},
] as INodeProperties[];

export const metricFields = [

	/* -------------------------------------------------------------------------- */
	/*                                metric:get                                  */
	/* -------------------------------------------------------------------------- */

	{
		displayName: 'Type',
		name: 'type',
		type: 'options',
		options: [
			{
				name: 'Daily',
				value: 'daily',
				description: 'Retrieve financial metric broken down by day for either the current month or the last',
			},
			{
				name: 'Monthly',
				value: 'monthly',
				description: 'Retrieve all monthly financial metric for your company',
			},
		],
		default: '',
		required: true,
		displayOptions: {
			show: {
				resource: [
					'metric',
				],
				operation: [
					'get',
				],
			},
		},
	},
	{
		displayName: 'Month',
		name: 'month',
		type: 'string',
		default: '',
		placeholder: 'YYYY-MM',
		required: true,
		displayOptions: {
			show: {
				resource: [
					'metric',
				],
				operation: [
					'get',
				],
				type: [
					'daily',
				],
			},
		},
		description: 'Can only be the current or previous month. Format should be YYYY-MM',
	},
	{
		displayName: 'Simplify Response',
		name: 'simple',
		type: 'boolean',
		default: true,
		displayOptions: {
			show: {
				resource: [
					'metric',
				],
				operation: [
					'get',
				],
			},
		},
		description: 'Return a simplified version of the response instead of the raw data.',
	},
	{
		displayName: 'Options',
		name: 'options',
		type: 'collection',
		placeholder: 'Add Option',
		displayOptions: {
			show: {
				resource: [
					'metric',
				],
				operation: [
					'get',
				],
			},
		},
		default: {},
		options: [
			{
				displayName: 'Plan ID',
				name: 'plan_id',
				type: 'options',
				typeOptions: {
					loadOptionsMethod: 'getPlanIds',
				},
				default: '',
				description: 'Only return the metric for this Plan ID',
			},
			{
				displayName: 'Metrics',
				name: 'dailyMetrics',
				type: 'multiOptions',
				displayOptions: {
					show: {
						'/type': [
							'daily',
						],
					},
				},
				options: [
					{
						name: 'Active Customers',
						value: 'active_customers',
						description: 'Number of paying customers',
					},
					{
						name: 'Churned Customers',
						value: 'churned_customers',
						description: 'Number of paying customers who churned',
					},
					{
						name: 'Churned Recurring Revenue',
						value: 'churned_recurring_revenue',
						description: 'MRR lost to churn (voluntary and delinquent)',
					},
					{
						name: 'Cumulative Net New MRR',
						value: 'cumulative_net_new_mrr',
						description: 'New + Upgrades - Downgrades - Churn MRR, cumulative for the month up through the given day',
					},
					{
						name: 'Cumulative New Trialing Customers',
						value: 'cumulative_new_trialing_customers',
						description: 'Number of new trialing customers, cumulative for the month up through the given day',
					},
					{
						name: 'Downgraded Customers',
						value: 'downgraded_customers',
						description: 'Number of existing customers who net downgraded',
					},
					{
						name: 'Downgraded Recurring Revenue',
						value: 'downgraded_recurring_revenue',
						description: 'How much downgrades and plan length decreases affect your MRR',
					},
					{
						name: 'Future Churn MRR',
						value: 'future_churn_mrr',
						description: 'MRR that will be lost when users who are currently cancelled actually churn',
					},
					{
						name: 'New Customers',
						value: 'new_customers',
						description: 'Number of new, paying customers you have',
					},
					{
						name: 'New Recurring Revenue',
						value: 'new_recurring_revenue',
						description: 'MRR from new users',
					},
					{
						name: 'Reactivated Customers',
						value: 'reactivated_customers',
						description: 'Number of customers who have reactivated',
					},
					{
						name: 'Reactivated Recurring Revenue',
						value: 'reactivated_recurring_revenue',
						description: 'How much MRR comes from reactivated customers',
					},
					{
						name: 'Recurring Revenue',
						value: 'recurring_revenue',
						description: `Your company's MRR`,
					},
					{
						name: 'Upgraded Customers',
						value: 'upgraded_customers',
						description: `Number of existing customers who net upgraded`,
					},
					{
						name: 'Upgraded Recurring Revenue',
						value: 'upgraded_recurring_revenue',
						description: `How much upgrades and plan length increases affect your MRR`,
					},
				],
				default: '',
				description: 'Comma-separated list of metric trends to return (the default is to return all metric)',
			},
			{
				displayName: 'Metrics',
				name: 'monthlyMetrics',
				type: 'multiOptions',
				displayOptions: {
					show: {
						'/type': [
							'monthly',
						],
					},
				},
				options: [
					{
						name: 'Active Customers',
						value: 'active_customers',
						description: 'Number of paying customers',
					},
					{
						name: 'Active Trialing Customers',
						value: 'active_trialing_customers',
						description: 'Number of trialing customers',
					},
					{
						name: 'Average Revenue Per User',
						value: 'average_revenue_per_user',
						description: 'ARPU',
					},
					{
						name: 'Churned Customers',
						value: 'churned_customers',
						description: 'Number of paying customers who churned',
					},
					{
						name: 'Churned Customers Cancellations',
						value: 'churned_customers_cancellations',
						description: 'Number of customers who churned by cancelling their subscription(s)',
					},
					{
						name: 'Churned Customers Delinquent',
						value: 'churned_customers_delinquent',
						description: 'Number of customers who churned because they failed to pay you',
					},
					{
						name: 'Churned Recurring Revenue',
						value: 'churned_recurring_revenue',
						description: 'Revenue lost to churn (voluntary and delinquent)',
					},
					{
						name: 'Churned Recurring Revenue Cancellations',
						value: 'churned_recurring_revenue_cancellations',
						description: 'Revenue lost to customers who churned by cancelling their subscription(s)',
					},
					{
						name: 'Churned Recurring Revenue Delinquent',
						value: 'churned_recurring_revenue_delinquent',
						description: 'Revenue lost to customers who churned delinquent',
					},
					{
						name: 'Churned Trialing Customers',
						value: 'churned_trialing_customers',
						description: 'Number of trialling customers who churned',
					},
					{
						name: 'Converted Customers',
						value: 'converted_customers',
						description: 'Number of customers who converted from trialing to active',
					},
					{
						name: 'Converted Recurring Revenue',
						value: 'converted_recurring_revenue',
						description: 'How much MRR comes from users who converted from trialing to active',
					},
					{
						name: 'Customer Churn Cancellations Rate',
						value: 'customers_churn_cancellations_rate',
						description: `Percentage of paying customers who churned by cancelling their subscription(s)`,
					},
					{
						name: 'Customer Churn Delinquent Rate',
						value: 'customers_churn_delinquent_rate',
						description: `Percentage of paying customers who churned because they failed to pay you`,
					},
					{
						name: 'Customer Churn Rate',
						value: 'customers_churn_rate',
						description: `Percentage of paying customers who churned`,
					},
					{
						name: 'Customer Conversion Rate',
						value: 'customer_conversion_rate',
						description: 'Percent of trialing customers who converted',
					},
					{
						name: 'Customer Retention Rate',
						value: 'customers_retention_rate',
						description: 'Percent of customers active last month who are still active this month',
					},
					{
						name: 'Downgrade Customers',
						value: 'downgraded_customers',
						description: 'Number of existing customers who net downgraded',
					},
					{
						name: 'Downgrade Rate',
						value: 'downgrade_rate',
						description: 'Downgrade revenue as a percent of existing revenue',
					},
					{
						name: 'Downgrade Recurring Revenue',
						value: 'downgraded_recurring_revenue',
						description: 'How much downgrades and plan length decreases affect your MRR	',
					},
					{
						name: 'Existing Customers',
						value: 'existing_customers',
						description: 'Number of paying customers you had at the start of the given month',
					},
					{
						name: 'Existing Recurring Revenue',
						value: 'existing_recurring_revenue',
						description: `Your company's MRR at the start of the given month`,
					},
					{
						name: 'Existing Trialing Customers',
						value: 'existing_trialing_customers',
						description: `Number of trialing customers who existed at the start of the month`,
					},
					{
						name: 'Growth_Rate',
						value: 'growth_rate',
						description: `Rate at which your company's MRR has grown over the previous month`,
					},
					{
						name: 'Lifetime Value',
						value: 'lifetime_value',
						description: `Average LTV, as calculated at the end of the given period`,
					},
					{
						name: 'New Customers',
						value: 'new_customers',
						description: `Number of new, paying customers you have`,
					},
					{
						name: 'New Recurring Revenue',
						value: 'new_recurring_revenue',
						description: `MRR from new users`,
					},
					{
						name: 'New Trailing Customers',
						value: 'new_trialing_customers',
						description: `Number of new trialing customers`,
					},
					{
						name: 'Reactivated Customers',
						value: 'reactivated_customers',
						description: `Number of customers who have reactivated`,
					},
					{
						name: 'Reactivated Recurring Revenue',
						value: 'reactivated_recurring_revenue',
						description: `How much MRR comes from reactivated customers`,
					},
					{
						name: 'Recurring Revenue',
						value: 'recurring_revenue',
						description: `Your company's MRR`,
					},
					{
						name: 'Revenue Churn Cancellations Rate',
						value: 'revenue_churn_cancellations_rate',
						description: `Voluntary churn revenue as a percent of the month's starting revenue`,
					},
					{
						name: 'Revenue Churn Delinquent_ Rate',
						value: 'revenue_churn_delinquent_rate',
						description: `Delinquent churn revenue as a percent of the month's starting revenue	`,
					},
					{
						name: 'Revenue Churn Rate',
						value: 'revenue_churn_rate',
						description: `Revenue lost to churn as a percentage of existing revenue`,
					},
					{
						name: 'Revenue Retention Rate',
						value: 'revenue_retention_rate',
						description: `Percent of revenue coming from existing customers that was retained by the end of the month`,
					},
					{
						name: 'Upgrade Rate',
						value: 'upgrade_rate',
						description: `Upgrade revenue as a percent of existing revenue`,
					},
					{
						name: 'Upgraded Customers',
						value: 'upgraded_customers',
						description: `Number of existing customers who net upgraded	`,
					},
					{
						name: 'Upgraded Recurring Revenue',
						value: 'upgraded_recurring_revenue',
						description: `How much upgrades and plan length increases affect your MRR`,
					},
					{
						name: 'Plan Changed Rate',
						value: 'plan_change_rate',
						description: `Net change in revenue as a percentage of existing revenue`,
					},
					{
						name: 'Plan Changed Recurring Revenue',
						value: 'plan_changed_recurring_revenue',
						description: `Net change in revenue for this plan`,
					},
				],
				default: '',
				description: 'Comma-separated list of metric trends to return (the default is to return all metric)',
			},
		],
	},
] as INodeProperties[];