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

async function getApplicantsDropdown(auth: AppConnectionValueForAuthProperty<typeof fountainAuth>): Promise<{ label: string; value: string }[]> {
  try {
    const response = await httpClient.sendRequest({
      method: HttpMethod.GET,
      url: getApiUrl(auth, '/applicants'),
      headers: getAuthHeaders(auth),
      queryParams: { per_page: '50' },
    });

    const applicants = response.body?.applicants || [];
    return applicants.map((applicant: any) => ({
      label: `${applicant.name} (${applicant.email})`,
      value: applicant.id,
    }));
  } catch (error) {
    return [];
  }
}

export const fountainGetInterviewSessions = createAction({
  name: 'get_interview_sessions',
  auth: fountainAuth,
  displayName: 'Get Interview Sessions',
  description: 'Returns the applicant\'s interview sessions',
  audience: 'both',
  aiMetadata: { description: 'Lists the booked interview slots/sessions for a single applicant, identified by their applicant ID. Use to check a candidate\'s scheduled interviews. Read-only and idempotent.', idempotent: true },
  props: {
    id: Property.Dropdown({
      displayName: 'Applicant',
      description: 'The applicant to get interview sessions for (shows 50 most recent applicants)',
      required: true,
      refreshers: [],
      auth: fountainAuth,
      options: async ({ auth }) => {
        if (!auth) return { disabled: true, options: [], placeholder: 'Connect account first' };
        return { disabled: false, options: await getApplicantsDropdown(auth as any) };
      },
    }),
  },
  async run(context) {
    const applicantId = context.propsValue.id;

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

    return response.body;
  },
});
