import type { ExpenseType } from "src/modules/timesheets/models/expense.models";

export const getExpenseIcon = (type: ExpenseType) => {
    switch (type) {
        case 'MILEAGE': return 'time_to_leave';
        case 'EXPENSES': return 'receipt_long';
        case 'PER_DIEM': return 'hotel';
        case 'ON_CALL': return 'phone_android';
        default: return 'help_outline';
    }
};

export const useExpenseRules = (t: (_key: string) => string) => {
    const isPresent = (val: unknown) => val !== undefined && val !== null && val !== '';
    const typeRequired = (val: unknown) => (!!val) || t('timesheet.expense.errors.type_required');
    const amountRequired = (val: unknown) => (isPresent(val)) || t('timesheet.expense.errors.amount_required_for_type');
    const mileageRequired = (val: unknown) => (isPresent(val)) || t('timesheet.expense.errors.mileage_required_for_type');
    const commentRequired = (val: unknown) => (typeof val === 'string' ? val.trim().length > 0 : false) || t('timesheet.expense.errors.comment_required');

    return {
        typeRequired,
        amountRequired,
        mileageRequired,
        commentRequired,
    };
};

export const convertToMonetaryAmount = (amount: number | string): number => {
    if (typeof amount === 'number') return Number(amount.toFixed(2));
    
    if (typeof amount === 'string') {
        try {
            const single_decimal_amount = amount.replace(/\.(?=.*\.)/g, '');
            const numbers_only_decimal = single_decimal_amount.replace(/[^0-9.]/g, '');
    
            return Number(numbers_only_decimal);
        } catch(error) {
            console.error(error);
        }
    }

    return 0; 
};