import { posthogHelper } from '@botpress/common'
import { IntegrationDefinition, z } from '@botpress/sdk'
import { actions, events, subdomain } from './definitions'

export const INTEGRATION_NAME = 'bamboohr'
export const INTEGRATION_VERSION = '2.1.3'

export default new IntegrationDefinition({
  name: INTEGRATION_NAME,
  version: INTEGRATION_VERSION,
  title: 'BambooHR',
  description: 'Retrieve your BambooHR information',
  readme: 'hub.md',
  icon: 'icon.svg',

  configuration: {
    identifier: {
      linkTemplateScript: 'linkTemplate.vrl',
      required: true,
    },
    schema: z.object({}),
  },

  configurations: {
    manual: {
      title: 'Manual configuration',
      description: 'Configure manually with your BambooHR API Key',
      schema: z.object({
        apiKey: z.string().min(1).title('API Key').describe('Your BambooHR API Key, from My Account > Api Keys'),
        subdomain,
      }),
    },
  },
  actions,
  events,
  secrets: {
    OAUTH_CLIENT_SECRET: {
      description: 'The OAuth Client Secret provided by BambooHR from the developer portal.',
    },
    OAUTH_CLIENT_ID: {
      description: 'The OAuth Client ID provided by BambooHR from the developer portal.',
    },
    ...posthogHelper.COMMON_SECRET_NAMES,
  },
  states: {
    oauth: {
      type: 'integration',
      schema: z
        .object({
          domain: z.string().title('Domain').describe('The domain of the company.'),
          accessToken: z.string().title('Temporary Access Token').describe('Temporary access token for the API.'),
          refreshToken: z.string().title('Refresh Token').describe('Token used to refresh the access token.'),
          expiresAt: z
            .number()
            .title('Expiration Timestamp')
            .describe('Timestamp (in ms from epoch) at which the token expires.'),
          scopes: z.string().title('Scopes').describe('Scopes for the token (space-separated).'),
        })
        .title('OAuth Parameters')
        .describe('Parameters required to authenticate via OAuth. Not required if using API Key.'),
    },
    webhook: {
      type: 'integration',
      schema: z.object({
        privateKey: z
          .string()
          .nullable()
          .title('Private Key')
          .describe('The private key provided by BambooHR to validate the webhook.'),
        id: z
          .string()
          .nullable()
          .title('Webhook ID')
          .describe('The ID of the webhook as provided by BambooHR when the webhook was created.'),
      }),
    },
  },
  attributes: {
    category: 'Business Operations',
    guideSlug: 'bamboohr',
    repo: 'botpress',
  },
})
