"use server";

import { apiClient } from "@/src/app/api/client";
import { extractDomain } from "../utils/domain";
import { sanitizeMoneyInFormSteps } from "../utils/money";

interface FormSubmissionData {
  form_id: string;
  form_data: Array<Record<string, any>>;
  slug: string;
  class_details?: {  // Add class details
    group_id?: number | string;
    franchise_id?: number | string;
    group_name: string;
    program_name: string;
    instructor_name?: string;
    start_date: string;
    start_time: string;
    end_time: string;
    day: string[];
    price?: string | number;
    price_name?: string;
    payer_id?: string | number;
    invoice_tax_value?: string | number;
    invoice_tax_label?: string;
    company_name?: string;
    company_address?: string;
  };
}

export async function submitFormAction(data: FormSubmissionData) {
  try {
    const domain = await extractDomain();

    // Merge class_details into form_data array
    const mergedFormData = [...data.form_data];
    if (data.class_details) {
      mergedFormData.push({
        class_details: data.class_details,
      });
    }

    const sanitizedFormData = sanitizeMoneyInFormSteps(
      mergedFormData as Array<Record<string, unknown>>
    );

    const response = await apiClient.post(
      `forms/${data.slug}`,
      {
        form_id: data.form_id,
        form_data: sanitizedFormData,
      },
      {
        headers: {
          "X-Domain": domain,
        },
      }
    );

    const submissionId = response.data?.data?.id || response.data?.data?.submission_id;

    return {
      status: response.data?.status || true,
      message: response.data?.message,
      data: response.data?.data,
      submission_id: submissionId,
    };
  } catch (error: any) {
    const backendMessage = error?.response?.data?.message;
    if (backendMessage) {
      return { status: false, message: backendMessage };
    }
    if (error instanceof Error) {
      return {
        status: false,
        message: error.message || "Failed to submit form",
      };
    }
    return {
      status: false,
      message: "An error occurred while submitting the form",
    };
  }
}
