/**
 * Dossier de planification d'une pose, créé côté fleet quand une commande de
 * boîtiers passe à « livré » puis assigné à un installateur. Ce dernier propose
 * 3 créneaux ; le client en accepte un ou en suggère d'autres.
 *
 * Les statuts (et leur libellé/couleur) sont résolus côté backend
 * (`InstallationRequest::STATUSES`) et renvoyés tels quels par les resources.
 */
export type InstallationRequestStatus =
  | 'pending'
  | 'dates_proposed'
  // Statut de DEMANDE uniquement (jamais d'un groupe) : groupes dans des états
  // hétérogènes (un planifié, un refusé, un en attente) → planification en cours.
  | 'in_progress'
  | 'scheduled'
  | 'client_counter'
  | 'cancelled';

/**
 * Ligne de liste renvoyée par `GET /installation-requests`
 * (`InstallationRequestListResource`).
 */
export interface InstallationRequestBox {
  name?: string | null;
  quantity?: number | null;
}

export interface InstallationRequestVehicle {
  id?: number | null;
  plate?: string | null;
  vin?: string | null;
  model?: string | null;
  year?: number | string | null;
  box?: string | null;
  /** Produit du catalogue fleet choisi pour ce véhicule : verrouille le boîtier dans le wizard. */
  telematics_box_id?: number | null;
  /** Site de livraison du véhicule : permet de regrouper les véhicules par site. */
  site_id?: number | null;
  site_name?: string | null;
}

/**
 * Site de livraison d'une commande, avec son contact dédié. Une commande peut
 * être livrée sur plusieurs sites — chacun a son propre contact sur place.
 */
export interface InstallationRequestSite {
  site_name?: string | null;
  address?: string | null;
  contact_name?: string | null;
  contact_phone?: string | null;
  contact_email?: string | null;
  units?: number | null;
}

/**
 * Groupe de planification au sein d'une demande : sous-ensemble de véhicules,
 * ses 3 créneaux proposés et son statut de négociation (réutilise les statuts
 * de la demande). L'installateur scinde les véhicules en groupes et propose des
 * créneaux par groupe.
 */
export interface InstallationRequestGroup {
  id: number;
  status: InstallationRequestStatus;
  status_label: string;
  status_color: string;
  vehicles: InstallationRequestVehicle[];
  vehicle_ids: number[];
  proposed_dates: string[];
  selected_date?: string | null;
  client_suggested_dates?: string[] | null;
  client_message?: string | null;
  installation_id?: number | null;
  created_at?: string | null;
}

export interface InstallationRequestSummary {
  id: number;
  reference?: string | null;
  status: InstallationRequestStatus;
  status_label: string;
  status_color: string;
  telematics_box_order_id: number | null;
  order_reference?: string | null;
  company_name?: string | null;
  box_type?: string | null;
  boxes?: InstallationRequestBox[];
  vehicles_count: number;
  location?: string | null;
  assigned_user_id?: number | null;
  installer_name?: string | null;
  selected_date?: string | null;
  created_at?: string | null;
  updated_at?: string | null;
}

export interface InstallationRequestEvent {
  id: number;
  event: string;
  from_status?: string | null;
  to_status?: string | null;
  payload?: Record<string, unknown> | null;
  user_id?: number | null;
  created_at?: string | null;
}

/**
 * Détail renvoyé par `GET /installation-requests/{id}`
 * (`InstallationRequestResource`).
 */
export interface InstallationRequestDetail extends InstallationRequestSummary {
  company_id?: number | null;
  contact_name?: string | null;
  contact_email?: string | null;
  contact_phone?: string | null;
  sites?: InstallationRequestSite[];
  vehicles?: InstallationRequestVehicle[];
  /** Groupes de planification (créneaux par sous-ensemble de véhicules). */
  groups?: InstallationRequestGroup[];
  proposed_dates: string[];
  client_suggested_dates?: string[] | null;
  client_message?: string | null;
  notes?: string | null;
  installation_id?: number | null;
  events?: InstallationRequestEvent[];
}
