import type {
  TelematicsOrder,
  TelematicsOrderDetail,
  TelematicsOrderStats,
  RequestInstallationPayload,
  RequestInstallationResult,
  OrderInstallationRequest,
} from "@/domain/entities/telematics-order";
import type { BackendPaginatedData, PaginationQueryParams } from "@/shared/types";

export interface TelematicsOrderRepository {
  findAll(params: PaginationQueryParams): Promise<BackendPaginatedData<TelematicsOrder>>;
  findById(id: number): Promise<TelematicsOrderDetail>;
  getStats(): Promise<TelematicsOrderStats>;
  /** Accepte une commande « Lancé ». `orderDate` au format ISO (YYYY-MM-DD). */
  accept(id: number, orderDate: string, note?: string): Promise<TelematicsOrderDetail>;
  reject(id: number, reason: string): Promise<TelematicsOrderDetail>;
  /** Passe une commande « En cours » à « Livré ». `receivedDate` au format ISO (YYYY-MM-DD). */
  markDelivered(id: number, receivedDate: string): Promise<TelematicsOrderDetail>;
  requestInstallation(
    id: number,
    payload: RequestInstallationPayload
  ): Promise<RequestInstallationResult>;
  /** Suivi (lecture seule) des réponses des installateurs notifiés. */
  getInstallationRequests(id: number): Promise<OrderInstallationRequest[]>;
}
