export interface KpiPeriodRange {
  currentStart?: string;
  currentEnd?: string;
  previousStart?: string;
  previousEnd?: string;
  monthStart?: string;
  monthEnd?: string;
}

export interface KpiChange {
  amount: number;
  percentage: number | null;
}

export interface OverviewSalesKpi {
  currentMonth: number;
  previousMonth: number;
  ticketCountCurrentMonth: number;
  ticketCountPreviousMonth: number;
  change: KpiChange;
}

export interface OverviewExpensesKpi {
  currentMonth: number;
  previousMonth: number;
  recordCountCurrentMonth: number;
  recordCountPreviousMonth: number;
  change: KpiChange;
}

export interface OverviewNetKpi {
  currentMonth: number;
  previousMonth: number;
  change: KpiChange;
}

export interface OverviewKpiResponse {
  period: KpiPeriodRange;
  sales: OverviewSalesKpi;
  expenses: OverviewExpensesKpi;
  net: OverviewNetKpi;
}

export interface SalesTotalsKpi {
  totalSales: number;
  totalCollected: number;
  totalPending: number;
  ticketCount: number;
}

export interface SalesByPaymentMethodKpi {
  paymentMethod: string;
  totalSales: number;
  totalCollected: number;
  totalPending: number;
  ticketCount: number;
}

export interface SalesByStatusKpi {
  status: string;
  totalSales: number;
  totalPending: number;
  ticketCount: number;
}

export interface SalesKpiResponse {
  period: KpiPeriodRange;
  totals: SalesTotalsKpi;
  byPaymentMethod: SalesByPaymentMethodKpi[];
  byStatus: SalesByStatusKpi[];
}

export interface ReceivablesTotalsKpi {
  totalPendingAmount: number;
  overdueAmount: number;
  pendingCount: number;
  overdueCount: number;
  receivablesCreatedThisMonth: number;
  amountCreatedThisMonth: number;
}

export interface ReceivablesByStatusKpi {
  status: string;
  totalAmount: number;
  balanceAmount: number;
  count: number;
}

export interface ReceivablesKpiResponse {
  period: KpiPeriodRange;
  totals: ReceivablesTotalsKpi;
  byStatus: ReceivablesByStatusKpi[];
}

export interface ExpensesTotalsKpi {
  totalAmount: number;
  totalPaid: number;
  totalPending: number;
  recordCount: number;
}

export interface ExpensesByCategoryKpi {
  categoryId: number;
  categoryName: string;
  totalAmount: number;
  paidAmount: number;
  pendingAmount: number;
  count: number;
}

export interface ExpensesByExpenseCenterKpi {
  expenseCenterId: number;
  expenseCenterName: string;
  totalAmount: number;
  count: number;
}

export interface ExpensesKpiResponse {
  period: KpiPeriodRange;
  totals: ExpensesTotalsKpi;
  byCategory: ExpensesByCategoryKpi[];
  byExpenseCenter: ExpensesByExpenseCenterKpi[];
}
