import { INodeProperties } from 'n8n-workflow';

export const customFieldOperations: INodeProperties[] = [
  {
    displayName: 'Operation',
    name: 'operation',
    type: 'options',
    noDataExpression: true,
    displayOptions: {
      show: {
        resource: ['customField'],
      },
    },
    options: [
      {
        name: 'Create',
        value: 'create',
        description: 'Create a custom field',
        action: 'Create a custom field',
      },
      {
        name: 'Delete',
        value: 'delete',
        description: 'Delete a custom field',
        action: 'Delete a custom field',
      },
      {
        name: 'Get',
        value: 'get',
        description: 'Get a custom field',
        action: 'Get a custom field',
      },
      {
        name: 'Get Many',
        value: 'getAll',
        description: 'Get many custom fields',
        action: 'Get many custom fields',
      },
      {
        name: 'Update',
        value: 'update',
        description: 'Update a custom field',
        action: 'Update a custom field',
      },
    ],
    default: 'create',
  }
];

export const customFieldFields: INodeProperties[] = [
  {
    displayName: 'Name',
    name: 'name',
    type: 'string',
    default: '',
    required: true,
    displayOptions: {
      show: {
        resource: ['customField'],
        operation: ['create', 'update'],
      },
    },
  },
  {
    displayName: 'Field Type',
    name: 'dataType',
    type: 'options',
    options: [
      {
        name: 'Boolean',
        value: 'BOOLEAN',
      },
      {
        name: 'Date',
        value: 'DATE',
      },
      {
        name: 'Number',
        value: 'NUMBER',
      },
      {
        name: 'Select',
        value: 'SELECT',
      },
      {
        name: 'Text',
        value: 'TEXT',
      },
    ],
    default: 'TEXT',
    required: true,
    displayOptions: {
      show: {
        resource: ['customField'],
        operation: ['create'],
      },
    },
  },
  {
    displayName: 'Entity Type',
    name: 'model',
    type: 'options',
    options: [
      {
        name: 'Contact',
        value: 'contact',
      },
      {
        name: 'Opportunity',
        value: 'opportunity',
      },
    ],
    default: 'contact',
    required: true,
    displayOptions: {
      show: {
        resource: ['customField'],
        operation: ['create'],
      },
    },
  },
  {
    displayName: 'Options',
    name: 'options',
    type: 'string',
    default: '',
    description: 'Comma-separated list of options (for select type fields)',
    displayOptions: {
      show: {
        resource: ['customField'],
        operation: ['create', 'update'],
        type: ['select'],
      },
    },
  },
  {
    displayName: 'Default Value',
    name: 'defaultValue',
    type: 'string',
    default: '',
    displayOptions: {
      show: {
        resource: ['customField'],
        operation: ['create', 'update'],
      },
    },
  },
  {
    displayName: 'Custom Field ID',
    name: 'customFieldId',
    type: 'string',
    required: true,
    default: '',
    displayOptions: {
      show: {
        resource: ['customField'],
        operation: ['delete', 'get', 'update'],
      },
    },
  },
  {
    displayName: 'Return All',
    name: 'returnAll',
    type: 'boolean',
    default: false,
    description: 'Whether to return all results or only up to a given limit',
    displayOptions: {
      show: {
        resource: ['customField'],
        operation: ['getAll'],
      },
    },
  },
  {
    displayName: 'Limit',
    name: 'limit',
    type: 'number',
    default: 50,
    description: 'Max number of results to return',
    typeOptions: {
      minValue: 1,
    },
    displayOptions: {
      show: {
        resource: ['customField'],
        operation: ['getAll'],
        returnAll: [false],
      },
    },
  },
];
