import type {
  AntaiVehicle,
  AntaiVehicleDetail,
  AntaiVehicleStats,
  AntaiVehicleOptions,
  AntaiActionResult,
  AntaiQueuedResult,
  AntaiDisableReason,
  UpdateAntaiExceptionPayload,
} from "@/domain/entities/antai-vehicle";
import type { BackendPaginatedData, PaginationQueryParams } from "@/shared/types";

export interface AntaiVehicleRepository {
  findAll(params: PaginationQueryParams): Promise<BackendPaginatedData<AntaiVehicle>>;
  findById(id: number): Promise<AntaiVehicleDetail>;
  getStats(): Promise<AntaiVehicleStats>;
  getOptions(): Promise<AntaiVehicleOptions>;

  /** Add the vehicle to ANTAI (antai_status → S). Synchronous. */
  enable(id: number): Promise<AntaiActionResult>;
  /** Remove the vehicle from ANTAI (antai_status → N). Synchronous. */
  disable(id: number, reason?: AntaiDisableReason): Promise<AntaiActionResult>;
  /** Track exception resolution. Does NOT change antai_status. */
  updateException(id: number, payload: UpdateAntaiExceptionPayload): Promise<AntaiActionResult>;

  /** Queue ANTAI add for many vehicles (processed off-request). */
  bulkEnable(vehicleIds: number[]): Promise<AntaiQueuedResult>;
  /** Queue ANTAI removal for many vehicles (processed off-request). */
  bulkDisable(vehicleIds: number[], reason?: AntaiDisableReason): Promise<AntaiQueuedResult>;

  /** Manual trigger of the disabled-company cascade (queues removal of every non-hidden vehicle). */
  disableCompanyVehicles(companyId: number): Promise<AntaiQueuedResult>;
}
