export type RentalStatus =
  | "QUOTE"
  | "RESERVED"
  | "IN_PROGRESS"
  | "FINISHED"
  | "CANCELED";

export interface RentalCustomerSummary {
  id: string;
  name: string;
  document: string;
  phone?: string | null;
  email?: string | null;
}

export interface RentalEquipmentSummary {
  id: string;
  code: string;
  assetTag: string;
  brand: string;
  model: string;
}

export interface RentalItem {
  id: string;
  rentalId?: string;
  equipmentId: string;
  quantity: number;
  dailyRate: number;
  total: number;
  equipment?: RentalEquipmentSummary;
}

export interface RentalReceivableSummary {
  id: string;
  description: string;
  amount: number;
  dueDate: string;
  paidAt?: string | null;
  status: "OPEN" | "PAID" | "OVERDUE" | "CANCELLED";
}

export interface Rental {
  id: string;
  companyId: string;
  customerId: string;
  code: string;
  startDate: string;
  endDate: string;
  subtotal: number;
  discount: number;
  freight: number;
  depositAmount?: number;
  paymentMethod?: string;
  installmentsCount?: number;
  total: number;
  operator?: string | null;
  notes?: string | null;
  status: RentalStatus;
  createdAt: string;
  updatedAt: string;
  customer?: RentalCustomerSummary;
  items?: RentalItem[];
  receivables?: RentalReceivableSummary[];
}

export interface CreateRentalItemDTO {
  equipmentId: string;
  quantity: number;
  dailyRate: number;
}

export interface CreateRentalInstallmentDTO {
  dueDate: string;
  amount: number;
}

export interface CreateRentalDTO {
  customerId: string;
  startDate: string;
  endDate: string;
  freight?: number;
  discount?: number;
  depositAmount?: number;
  paymentMethod?: string;
  installmentsCount?: number;
  installments?: CreateRentalInstallmentDTO[];
  operator?: string;
  notes?: string;
  status?: RentalStatus;
  items: CreateRentalItemDTO[];
}

export type UpdateRentalDTO = Partial<CreateRentalDTO>;

export interface RentalStats {
  total: number;
  inProgress: number;
  quote: number;
  finished: number;
  reserved: number;
  canceled: number;
  totalRevenue: number;
}

export interface RentalFilterParams {
  search?: string;
  status?: RentalStatus | "ALL";
  customerId?: string | "ALL";
  page?: number;
  limit?: number;
}
