import { api } from "./client";

export interface VehicleSummary {
  id: number;
  license_plate: string;
  vin?: string | null;
  make?: string | null;
  model?: string | null;
  year?: number | null;
  last_inspection_at?: string | null;
  /** Текущий статус машины из 1C Element (cars_v2.element_status):
      'На линии' / 'Простой' / 'Ремонтируется' / 'Ждет ремонта' / 'ДТП' /
      'Бронь' / 'Выкуп' / 'На продаже' / etc. NULL если не задан. */
  status?: string | null;
}

export interface VehicleDetail extends VehicleSummary {
  recent_inspections: InspectionSummary[];
  starline_mileage?: number | null;
  starline_mileage_at?: string | null;
}

export interface InspectionSummary {
  id: number;
  type: string;
  status: string;
  started_at: string;
  finished_at?: string | null;
  mileage?: number | null;
  photos_count?: number;
  /** Водитель, прикреплённый к машине на момент started_at (lookup в
      driver_rentals_v2 по car_number + перекрывающему периоду). NULL если
      на тот момент машина была свободна. */
  driver_id?: number | null;
  driver_name?: string | null;
}

export async function listVehicles(q?: string): Promise<VehicleSummary[]> {
  const searchParams: Record<string, string> = {};
  if (q && q.trim()) searchParams.q = q.trim();
  const res = await api
    .get("vehicles", { searchParams })
    .json<{ items: VehicleSummary[] }>();
  return res.items;
}

export async function getVehicle(id: number): Promise<VehicleDetail> {
  return api.get(`vehicles/${id}`).json<VehicleDetail>();
}

// ── TT-Control vendor archive (Element Mechanic) ───────────────────────────

export interface TtStateSummary {
  id: number;
  vendor_state_id: string;
  unix_time: number | null;
  mechanic_name: string | null;
  mileage: number | null;
  photos_count: number;
  damages_count: number;
  /** Водитель, прикреплённый к машине на момент unix_time (lookup в
      driver_rentals_v2 по car_number + перекрывающему/предыдущему периоду).
      NULL если на тот момент машина была свободна. */
  driver_id?: number | null;
  driver_name?: string | null;
}

export interface TtHistory {
  vendor_vehicle_id: string | null;
  plate?: string | null;
  brand?: string | null;
  model?: string | null;
  states: TtStateSummary[];
}

export interface TtPhotoRef {
  image_id: string;
  image_with_lines_id: string | null;
  unix_time: number | null;
  guid: string | null;
}

export interface TtDamage {
  damage_type_id: number | null;
  degree: number | null;
  points: { x: number; y: number }[];
  guid: string | null;
  unix_time: number | null;
}

export interface TtSidePhoto {
  image_id: string;
  miniature_id: string | null;
  photo_type: number | null;
}

export interface TtStateDetail {
  id: number;
  vendor_state_id: string;
  unix_time: number | null;
  mechanic_name: string | null;
  mileage: number | null;
  side_photos: TtSidePhoto[];
  photos_by_zone: Record<string, TtPhotoRef[]>;
  damages_by_zone: Record<string, TtDamage[]>;
}

export async function getTtHistory(vehicleId: number): Promise<TtHistory> {
  return api.get(`vehicles/${vehicleId}/tt-history`).json<TtHistory>();
}

export async function getTtState(stateId: number): Promise<TtStateDetail> {
  return api.get(`tt-states/${stateId}`).json<TtStateDetail>();
}

export async function deleteTtState(stateId: number): Promise<void> {
  await api.delete(`tt-states/${stateId}`);
}

export function ttImageUrl(imageId: string, withLines: boolean = false): string {
  // tt-image endpoint без auth-guard'а (vendor сам публично отдаёт эти JPEG'и),
  // поэтому подходит для прямого <img src=...>.
  const base = import.meta.env.VITE_API_BASE ?? "/api/v1/mechanic";
  return `${base}/tt-image/${imageId}${withLines ? "?lines=true" : ""}`;
}
