/**
 * Daily Collection Module Type Definitions
 */

/**
 * Summary data for one collector on a given date
 */
export interface CollectorSummary {
    collector_id: number;
    collector_name: string;
    member_count: number;
    task_count: number;
    paid_count: number;
    expected_amount: number;
    collected_amount: number;
    completion_percentage: number;
}

/**
 * A single collection task (installment to collect)
 */
export interface CollectionTask {
    id: number;
    financing_id: number;
    sequence_number: number;
    due_date: string;
    principal_amount: number;
    margin_amount: number;
    total_amount: number;
    paid_total: number;
    total_outstanding: number;
    status: 'pending' | 'partial' | 'paid';
    days_overdue: number;
    financing: {
        id: number;
        account_number: string;
    };
    member: {
        id: number;
        name: string;
        phone: string;
        address: string;
    };
}

/**
 * Daily Collection Summary (response from getDailyCollectionSummary)
 */
export interface DailyCollectionData {
    date: string;
    summary: {
        total_collectors: number;
        total_tasks: number;
        total_members: number;
        total_expected: number;
        total_collected: number;
        overall_completion: number;
    };
    collectors: CollectorSummary[];
}

/**
 * Collector Tasks (response from getCollectorTasks)
 */
export interface CollectorTaskData {
    collector: {
        id: number;
        name: string;
        email: string;
    } | null;
    date: string;
    summary: {
        today_tasks: number;
        overdue_tasks: number;
        total_tasks: number;
        today_expected: number;
        overdue_expected: number;
        total_expected: number;
        collected_today: number;
    };
    tasks: import('@/types').PaginatedData<CollectionTask>;
}

/**
 * Performance metrics for one collector
 */
export interface CollectorPerformance {
    collector_id: number;
    collector_name: string;
    members_recruited: number;
    financing_proposals: number;
    tasks_assigned: number;
    tasks_completed: number;
    success_rate: number;
    amount_collected: number;
    amount_expected: number;
    achievement_rate: number;
    overdue_count: number;
}

/**
 * Monthly Performance Data (response from getMonthlyPerformance)
 */
export interface PerformanceData {
    year: number;
    month: number;
    month_name: string;
    summary: {
        total_members_recruited: number;
        total_financing_proposals: number;
        total_collected: number;
        total_expected: number;
        average_success_rate: number;
        top_recruiter: string;
    };
    collectors: CollectorPerformance[];
}

/**
 * A single task item on the teller input page.
 * Extends CollectionTask with the assigned collector's name.
 */
export interface TellerTask extends CollectionTask {
    collector_name: string;
}

/**
 * Props passed to the TellerInput page.
 */
export interface TellerInputData {
    tasks: TellerTask[];
    summary: {
        total_tasks: number;
        total_outstanding: number;
    };
    filters: {
        date: string;
        search: string;
    };
}
