import {
  createTrigger,
  Property,
  TriggerStrategy,
} from '@activepieces/pieces-framework';
import { MarkdownVariant } from '@activepieces/pieces-framework';

const setupMarkdown = `
## Setup Instructions

1. Go to your Fountain account Settings > Worker Attributes
2. Find the custom attribute you want to monitor
3. Click "..." > Manage Webhooks
4. In the modal, click "Add Webhook"
5. Copy and paste the webhook URL below into the URL field
6. Save the webhook configuration

**Webhook URL:**
\`\`\`text
{{webhookUrl}}
\`\`\`

This trigger will fire whenever the specified custom attribute's value changes for any worker.
`;

export const fountainCustomAttributeWebhook = createTrigger({
  name: 'custom_attribute_webhook',
  displayName: 'Custom Attribute Webhook',
  description: 'Triggers when Fountain worker custom attribute values change',
  aiMetadata: {
    description: 'Fires when the value of a monitored worker custom attribute changes in Fountain, carrying both the previous and new state of that attribute for the affected worker. Requires the webhook to be registered on the specific custom attribute in Fountain settings.',
  },
  props: {
    setup: Property.MarkDown({
      value: setupMarkdown,
      variant: MarkdownVariant.INFO,
    }),
  },
  sampleData: {
    webhookUuid: "36ea7dc3-2378-4769-a749-54387dea22c6",
    companyUuid: "b69527e2-cf03-45e4-b667-48db36133391",
    trigger: {
      type: "customAttribute",
      resourceIdentifier: "583ff255-459d-47b5-9f9f-b3a300c22c02"
    },
    action: "update",
    timestamp: "2024-07-28T13:06:11.443Z",
    workerUuid: "3b8d5848-c96a-4639-ac7d-132fe36a43f0",
    previousState: {
      customAttributeUuid: "583ff255-459d-47b5-9f9f-b3a300c22c02",
      customAttribute: {
        label: "test",
        dataType: "string",
        key: "test",
        readOnly: false,
        hidden: false,
        protected: false,
        uuid: "583ff255-459d-47b5-9f9f-b3a300c22c02"
      },
      value: "before"
    },
    newState: {
      customAttributeUuid: "583ff255-459d-47b5-9f9f-b3a300c22c02",
      customAttribute: {
        label: "test",
        dataType: "string",
        key: "test",
        readOnly: false,
        hidden: false,
        protected: false,
        uuid: "583ff255-459d-47b5-9f9f-b3a300c22c02"
      },
      value: "after"
    }
  },
  type: TriggerStrategy.WEBHOOK,
  async onEnable() {
    // No setup needed - webhook URL is provided for manual configuration in Fountain
  },
  async onDisable() {
    // No cleanup needed
  },
  async run(context) {
    const payload = context.payload.body as any;

    if (!payload.trigger || payload.trigger.type !== 'customAttribute') {
      return [];
    }

    return [payload];
  },
});
