import type { QTableColumn } from "quasar";

export class TimesheetApprovalOverview {
    email: string;
    employee_first_name: string;
    employee_last_name: string;
    supervisor: {
        first_name: string;
        last_name: string;
        email: string;
    } | null;
    is_active: boolean;
    regular_hours: number;
    other_hours: {
        evening_hours: number;
        emergency_hours: number;
        overtime_hours: number;
        sick_hours: number;
        holiday_hours: number;
        vacation_hours: number;
    };
    weekly_hours: number[];
    total_hours: number;
    expenses: number;
    mileage: number;
    is_approved: boolean;

    constructor() {
        this.email = '';
        this.employee_first_name = 'Unknown';
        this.employee_last_name = 'Unknown';
        this.supervisor = null;
        this.is_active = true;
        this.regular_hours = 0;
        this.other_hours = {
            evening_hours: 0,
            emergency_hours: 0,
            overtime_hours: 0,
            sick_hours: 0,
            holiday_hours: 0,
            vacation_hours: 0,
        }
        this.weekly_hours = [0];
        this.total_hours = 0;
        this.expenses = 0;
        this.mileage = 0;
        this.is_approved = false;
    };
}

export interface PayPeriodOverviewResponse {
  pay_period_no: number;
  pay_year: number;
  period_start: string;
  period_end: string;
  payday: string;
  label: string;
  employees_overview: TimesheetApprovalOverview[];
}

export interface PayPeriodOverviewFilters {
    is_showing_inactive: boolean;
    is_showing_team_only: boolean;
    supervisors: string[];
    name_search_string: string;
}

export type OverviewColumns = 'employee_first_name' | 'employee_last_name' | 'email' | 'REGULAR' | 'EVENING' | 'EMERGENCY' | 'SICK' | 'HOLIDAY' | 'VACATION' | 'OVERTIME' | 'expenses' | 'mileage' | 'total_hours' | 'weekly_hours_1' | 'weekly_hours_2' | 'is_approved' | 'is_active'

export const overview_column_names = {
    FIRST_NAME: 'employee_first_name',
    LAST_NAME: 'employee_last_name',
    EMAIL: 'email',
    REGULAR: 'REGULAR',
    EVENING: 'EVENING',
    EMERGENCY: 'EMERGENCY',
    SICK: 'SICK',
    HOLIDAY: 'HOLIDAY',
    VACATION: 'VACATION',
    OVERTIME: 'OVERTIME',
    EXPENSES: 'expenses',
    MILEAGE: 'mileage',
    WEEKLY_HOURS_1: 'weekly_hours_1',
    WEEKLY_HOURS_2: 'weekly_hours_2',
    TOTAL_HOURS: 'total_hours',
    IS_APPROVED: 'is_approved',
    IS_ACTIVE: 'is_active', 
}

export const pay_period_overview_columns: QTableColumn[] = [
    { 
        name: overview_column_names.FIRST_NAME, 
        label: 'timesheet_approvals.table.full_name', 
        align: 'left', 
        field: overview_column_names.FIRST_NAME,
        sortable: true,
        required: true,
        style: 'width: 10vw;'
    },
    { 
        name: overview_column_names.LAST_NAME, 
        label: 'timesheet_approvals.table.full_name', 
        align: 'left', 
        field: '',
        sortable: true,
    },
    { 
        name: overview_column_names.EMAIL, 
        label: 'timesheet_approvals.table.email',
        align: 'left', 
        field: overview_column_names.EMAIL, 
        sortable: true,
        style: 'width: 10vw;'
    },
    { 
        name: overview_column_names.REGULAR, 
        label: 'shared.shift_type.regular',
        align: 'left', 
        field: 'regular_hours', 
        sortable: true,
    },
    { 
        name: overview_column_names.EVENING, 
        label: 'shared.shift_type.evening',
        align: 'left',
        field: row => row.other_hours.evening_hours,
        sortable: true,
    },
    { 
        name: overview_column_names.EMERGENCY, 
        label: 'shared.shift_type.emergency', 
        align: 'left',
        field: row => row.other_hours.emergency_hours,
        sortable: true,
    },
     { 
        name: overview_column_names.SICK, 
        label: 'shared.shift_type.sick', 
        align: 'left',
        field: row => row.other_hours.sick_hours, 
        sortable: true, 
    },
    { 
        name: overview_column_names.HOLIDAY, 
        label: 'shared.shift_type.holiday', 
        align: 'left',
        field: row => row.other_hours.holiday_hours,
        sortable: true, 
    },
    { 
        name: overview_column_names.VACATION, 
        label: 'shared.shift_type.vacation', 
        align: 'left',
        field: row => row.other_hours.vacation_hours,
        sortable: true, 
    },
    { 
        name: overview_column_names.OVERTIME, 
        label: 'shared.shift_type.overtime', 
        align: 'left',
        field: row => row.other_hours.overtime_hours,
        sortable: true,
    },
    { 
        name: overview_column_names.EXPENSES, 
        label: 'timesheet_approvals.table.expenses', 
        align: 'left',
        field: 'expenses', 
        sortable: true, 
    },
    { 
        name: overview_column_names.MILEAGE, 
        label: 'timesheet_approvals.table.mileage', 
        align: 'left',
        field: 'mileage', 
        sortable: true,
    },
    { 
        name: overview_column_names.WEEKLY_HOURS_1, 
        label: 'timesheet.week', 
        align: 'left',
        field: 'weekly_hours', 
        sortable: true,
    },
    { 
        name: overview_column_names.WEEKLY_HOURS_2, 
        label: 'timesheet.week', 
        align: 'left',
        field: 'weekly_hours', 
        sortable: true,
    },
    { 
        name: overview_column_names.TOTAL_HOURS, 
        label: 'timesheet_approvals.table.total_hours', 
        align: 'left',
        field: 'total_hours', 
        sortable: true,
    },
    {
        name: overview_column_names.IS_APPROVED,
        label: 'timesheet_approvals.table.is_approved',
        field: 'is_approved',
        sortable: true,
    },
    {
        name: overview_column_names.IS_ACTIVE,
        label: 'timesheet_approvals.table.is_active',
        field: 'is_active',
        sortable: true,
    }
]