import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { fountainAuth } from '../auth';
import { getAuthHeaders, getApiUrl } from '../common/auth';
import { getFunnelsDropdown, getStagesForFunnelDropdown } from '../common/dropdowns';

export const fountainGetStage = createAction({
  name: 'get_stage',
  auth: fountainAuth,
  displayName: 'Get Stage',
  description: 'Retrieves a specific Stage',
  audience: 'both',
  aiMetadata: { description: 'Retrieves details for a single hiring-pipeline stage by its stage ID (the opening/funnel is selected only to scope the stage picker). Use to inspect a specific stage within an opening. Read-only and idempotent.', idempotent: true },
  props: {
    funnel_id: Property.Dropdown({
      displayName: 'Opening',
      description: 'The opening that contains the stage',
      required: true,
      refreshers: [],
      auth: fountainAuth,
      options: async ({ auth }) => {
        if (!auth) return { disabled: true, options: [], placeholder: 'Connect account first' };
        return { disabled: false, options: await getFunnelsDropdown(auth) };
      },
    }),
    id: Property.Dropdown({
      displayName: 'Stage',
      description: 'The stage to retrieve details for',
      required: true,
      refreshers: ['funnel_id'],
      auth: fountainAuth,
      options: async ({ auth, funnel_id }) => {
        if (!auth) return { disabled: true, options: [], placeholder: 'Connect account first' };
        if (!funnel_id) return { disabled: true, options: [], placeholder: 'Select opening first' };
        return { disabled: false, options: await getStagesForFunnelDropdown(auth, funnel_id as string) };
      },
    }),
  },
  async run(context) {
    const stageId = context.propsValue.id;

    const response = await httpClient.sendRequest({
      method: HttpMethod.GET,
      url: getApiUrl(context.auth, `/stages/${stageId}`),
      headers: getAuthHeaders(context.auth),
    });

    return response.body;
  },
});
