// Audit log TypeScript interfaces

export type AuditAction =
    | 'created'
    | 'updated'
    | 'deleted'
    | 'restored'
    | 'approved'
    | 'rejected'
    | 'disbursed'
    | 'posted'
    | 'voided'
    | 'transferred'
    | 'deposited'
    | 'withdrawn';

/**
 * Audit Log Entry
 */
export interface AuditLog {
    id: number;
    user_id: number | null;
    user_name: string | null;
    ip_address: string | null;
    user_agent: string | null;
    action: string;
    entity_type: string;
    entity_id: number;
    entity_identifier: string | null;
    old_values: Record<string, unknown> | null;
    new_values: Record<string, unknown> | null;
    changed_fields: string[] | null;
    description: string | null;
    url: string | null;
    method: string | null;
    created_at: string | null;
    updated_at: string | null;

    // Relationships
    user?: {
        id: number;
        name: string;
        email: string;
    };
}

/**
 * Filters for audit log list
 */
export interface AuditLogFilters {
    search?: string;
    action?: string;
    entity_type?: string;
    date_from?: string;
    date_to?: string;
    user_id?: string;
}

/**
 * Entity type configuration for display
 */
export const entityLabels: Record<string, string> = {
    members: 'Anggota',
    branches: 'Cabang',
    users: 'Pengguna',
    savings_accounts: 'Rekening Tabungan',
    savings_transactions: 'Transaksi Tabungan',
    financings: 'Pembiayaan',
    financing_installments: 'Angsuran',
    financing_payments: 'Pembayaran',
    accounts: 'Akun Akuntansi',
    journal_entries: 'Jurnal',
};

/**
 * Action labels for display
 */
export const actionLabels: Record<string, string> = {
    created: 'Dibuat',
    updated: 'Diubah',
    deleted: 'Dihapus',
    restored: 'Dipulihkan',
    approved: 'Disetujui',
    rejected: 'Ditolak',
    disbursed: 'Dicairkan',
    posted: 'Diposting',
    voided: 'Dibatalkan',
    transferred: 'Ditransfer',
    deposited: 'Disetor',
    withdrawn: 'Ditarik',
};
