import apiClient from "./apiClient";
import type { ApiEnvelope } from "../types/auth";
import type {
  InterventionsPayload,
  MobileInterventionDetails,
  MobilePrecheckPayload,
  MobilePrecheckState,
} from "../types/intervention";

type InterventionsQuery = {
  date_debut?: string;
  date_fin?: string;
};

export async function getMyInterventions(
  query: InterventionsQuery = {}
): Promise<InterventionsPayload> {
  const response = await apiClient.get<ApiEnvelope<InterventionsPayload>>(
    "/interventions.php",
    {
      params: query,
    }
  );

  if (!response.data?.success || !response.data.data) {
    throw new Error(response.data?.message || "Unable to fetch interventions");
  }

  const payload = response.data.data;
  return {
    items: Array.isArray(payload.items) ? payload.items : [],
    count: Number.isFinite(payload.count)
      ? Number(payload.count)
      : Array.isArray(payload.items)
      ? payload.items.length
      : 0,
    technicien_id: Number(payload.technicien_id || 0),
    date_debut: String(payload.date_debut || ""),
    date_fin: String(payload.date_fin || ""),
  };
}

export async function getInterventionById(
  id: number
): Promise<MobileInterventionDetails> {
  const response = await apiClient.get<
    ApiEnvelope<{ item: MobileInterventionDetails }>
  >("/intervention.php", {
    params: { id },
  });

  if (!response.data?.success || !response.data.data?.item) {
    throw new Error(response.data?.message || "Unable to fetch intervention");
  }

  return response.data.data.item;
}

export async function getInterventionPrecheck(
  interventionId: number
): Promise<MobilePrecheckState> {
  const response = await apiClient.get<ApiEnvelope<MobilePrecheckState>>(
    "/intervention_precheck.php",
    {
      params: { id: interventionId },
    }
  );

  if (!response.data?.success || !response.data.data) {
    throw new Error(response.data?.message || "Unable to fetch precheck");
  }

  return response.data.data;
}

export async function saveInterventionPrecheck(
  payload: MobilePrecheckPayload
): Promise<MobilePrecheckState> {
  const response = await apiClient.post<ApiEnvelope<MobilePrecheckState>>(
    "/intervention_precheck.php",
    payload
  );

  if (!response.data?.success || !response.data.data) {
    throw new Error(response.data?.message || "Unable to save precheck");
  }

  return response.data.data;
}

export async function startIntervention(
  payload: MobilePrecheckPayload
): Promise<MobilePrecheckState> {
  const response = await apiClient.post<ApiEnvelope<MobilePrecheckState>>(
    "/intervention_start.php",
    payload
  );

  if (!response.data?.success || !response.data.data) {
    throw new Error(response.data?.message || "Unable to start intervention");
  }

  return response.data.data;
}
