export interface StatCardProps {
    title: string;
    value: string | number;
    subtitle: string;
    icon: React.ReactNode;
    gradient: string;       // CSS gradient string for card background
    iconBg: string;         // icon circle background colour
    trend?: number;         // optional % change vs yesterday
    loading?: boolean;
}

export interface OutstandingItem {
    title: string;
    amount: number;
    color: string;
    icon: React.ReactNode;
}

export interface StockWarning {
    id: number;
    vegetable: string;
    minimum: number;
    remaining: number;
}

export interface TopDemandItem {
    vegetable: string;
    sold: number;
    bags?: number;
}

export interface RecentSaleItem {
    invoiceNo: string;
    customer: string;
    amount: number;
    status: string;   // "PAID" | "UNPAID" | "PARTIALLY_PAID"
    date: string;     // ISO date string yyyy-mm-dd
}

// ─── API Response Shape ───────────────────────────────────────────────────────

export interface DashboardStatCards {
    todaysPurchaseAmount: number;
    todaysSalesAmount: number;
    todaysExpensesAmount: number;
    todaysRetailSalesAmount?: number;
    todaysNetProfit?: number;
    totalCustomers: number;
    totalSellers: number;
}

export interface SalesProfitChartItem {
    day: string;
    sales: number;
    profit: number;
}

export interface AccountBalanceBreakdown {
    active: number;
    inactive: number;
    total: number;
}

export interface OutstandingAccounts {
    pendingVendorPayments: number;
    pendingCustomerReceipts: number;
    vendorPayments?: AccountBalanceBreakdown;
    customerReceipts?: AccountBalanceBreakdown;
}

export interface VegetableStockItem {
    id: number;
    vegetable: string;
    remaining: number;
    remainingBags?: number;
}

export interface DashboardData {
    statCards: DashboardStatCards;
    salesProfitChart: SalesProfitChartItem[];
    outstandingAccounts: OutstandingAccounts;
    vegetableStock: VegetableStockItem[];
    topDemandedVegetables: TopDemandItem[];
    recentSales: RecentSaleItem[];
}