import dayjs from "dayjs";
import { PDFForm } from "pdf-lib";

// Function that converts from Uint8Array to Base64-encoded string
export function uint8ToBase64(uint8Array : any) {
    let binary = ''
    for (let i = 0; i < uint8Array.length; i++) {
      binary += String.fromCharCode(uint8Array[i])
    }
    return btoa(binary)
  }


// Function setting the PDF file for different petition types

//ΑΙΤΗΣΗ ΣΥΜΒΑΣΗΣ
export const fillContractPetitionForm = (form: PDFForm, formData: any) => {

        // form.getTextField('FLD22').setText(formData.unit || "")
        // form.getTextField('FLD4').setText(formData.fill_form_date || "")
        // form.getTextField('FLD19').setText(formData.protocol_number || "")
        // form.getTextField('FLD18').setText(formData.project_code || "")
        // form.getDropdown('Dropdown5').select("ΤΥΠΟΣ ΣΥΜΒΑΣΗΣ")
        // form.getTextField('fill_6').setText(formData.fullname || "")
        // form.getTextField('fill_7').setText(formData.description || "")
        // form.getTextField('Text6').setText(formData.deliverables || "")
        // form.getTextField('Text15').setText(formData.contract_duration || "")
        // form.getTextField('Text29').setText(formData.contract_hours|| "")
        // form.getTextField('Text28').setText(formData.total_fee || "")

        // if(formData.employer_fee) {
        //     form.getCheckBox('Check Box5').check()
        // }

        // if(formData.added_tax) {
        //     form.getCheckBox('Check Box6').check()
        // }

        // form.getTextField('Text34').setText(formData.monthly_wage || "")

        // if(formData.full_week) {
        //     form.getCheckBox('Check Box8').check()
        // }

        // form.getDropdown('Dropdown27.0.0').select("ΩΡΑΡΙΟ ΕΒΔΟΜΑΔΑΣ")
        // form.getCheckBox('Check Box9').check()
        // form.getDropdown('Dropdown27.0.1.0.1').select("ΩΡΑΡΙΟ ΔΕΥΤΕΡΑΣ")
        // form.getCheckBox('Check Box11').check()
        // form.getDropdown('Dropdown27.0.1.1.1.0.1').select("ΩΡΑΡΙΟ ΤΡΙΤΗΣ")
        // form.getCheckBox('Check Box12').check()
        // form.getDropdown('Dropdown27.0.1.1.1.1.1').select("ΩΡΑΡΙΟ ΤΕΤΑΡΤΗΣ")
        // form.getCheckBox('Check Box7').check()
        // form.getDropdown('Dropdown27.1.0').select("ΩΡΑΡΙΟ ΠΕΜΠΤΗΣ")
        // form.getCheckBox('Check Box10').check()
        // form.getDropdown('Dropdown27.0.1.1.1.0.0').select("ΩΡΑΡΙΟ ΠΑΡΑΣΚΕΥΗΣ")
        // form.getCheckBox('Check Box13').check()
        // form.getCheckBox('Check Box14').check()
        // form.getCheckBox('Check Box15').check()
        // form.getCheckBox('Check Box16').check()
        // form.getCheckBox('Check Box17').check()
        // form.getCheckBox('Check Box18').check()
        // // ypografes
        // form.getSignature('Signature46').check()
        // form.getSignature('Signature46').check()
        // form.getSignature('Signature46').check()
        // //
        // form.getTextField('Text35').setText(formData.fullname || "")
        // form.getTextField('Text36').setText(formData.fullname || "")
        // form.getTextField('fill_22').setText(formData.fullname || "")
        // form.getTextField('Text37').setText(formData.fullname || "")
        // form.getTextField('Text38').setText(formData.fullname || "")
        // form.getTextField('Text39').setText(formData.fullname || "")
        // form.getTextField('Date23_af_date').setText(formData.date ? dayjs(formData.date).format('DD-MMM-YYYY') : '')
        // form.getCheckBox('Check Box24').check()
        // form.getCheckBox('Check Box25').check()
        // form.getTextField('Text40').setText(formData.fullname || "")
        // form.getTextField('Text41').setText(formData.fullname || "")
        // form.getTextField('Text42').setText(formData.fullname || "")
        // form.getTextField('Text43').setText(formData.fullname || "")
        // form.getSignature('Signature44').check()
        form.getTextField('fill_2_2.0.0').setText(formData.first_name || "");
        form.getTextField('fill_2_2.1.0').setText(formData.father_name || "");
        form.getTextField('fill_2_2.2.0').setText(formData.mother_name || "")
        form.getTextField('fill_2_2.3.0').setText(formData.date_of_birth ? dayjs(formData.date_of_birth).format('DD-MMM-YYYY') : "");
        form.getTextField('fill_2_2.4.0').setText(formData.family_status || "");
        form.getTextField('fill_2_2.5.0').setText(formData.address || "");
        form.getTextField('fill_2_2.6.0').setText(formData.home_phone || "");

        form.getTextField('Text7').setText(formData.lastname || "");
        form.getTextField('Text8').setText(formData.father_lastname || "");
        form.getTextField('Text9').setText(formData.mother_lastname || "");
        form.getTextField('Text10').setText(formData.email || "");
        form.getTextField('Text11').setText(formData.children || "");
        form.getTextField('Text13').setText(formData.city || "");
        form.getTextField('Text14').setText(formData.protected_children || "");
        form.getTextField('Text16').setText(formData.postal_code || "");
        form.getTextField('Text12').setText(formData.mobile_phone_number || "");
        form.getTextField('Text19').setText(formData.work_phone || "");
        form.getTextField('Text5').setText(formData.identity_card_number || "");
        form.getTextField('Text17').setText(formData.police_precinct || "");
        form.getTextField('Text23').setText(formData.passport_number || "");
        form.getTextField('Text24').setText(formData.amka || "");
        form.getTextField('Text18').setText(formData.ama || "");
        form.getTextField('undefined_2').setText(formData.afm || "");
        form.getTextField('fill_6_2').setText(formData.doy || "");
        form.getTextField('Date6_af_date').setText(formData.identity_date ? dayjs(formData.identity_date).format('DD-MMM-YYYY') : '');
        form.getDropdown('Dropdown1').select("Πληροφορικής");
        form.getTextField('fill_8_2').setText(formData.iban || "");
        form.getTextField('Text25').setText(formData.bank || "");
        form.getTextField('Text27').setText(formData.bic || "");

        if(formData.positive_declaration) {
            form.getCheckBox('Check Box28').check();
        }

        if(formData.negative_declaration) {
            form.getCheckBox('Check Box29').check();
        }

        form.getTextField('Text30').setText(formData.tameio || "");
        form.getTextField('fill_9_2').setText(formData.bulletin|| "");
        form.getTextField('fill_10_2').setText(formData.package || "");
        form.getTextField('fill_11_2').setText(formData.main_degree || "");
        form.getTextField('Text31').setText(formData.degree_specialty || "");
        form.getTextField('Text32').setText(formData.postgraduate|| "");
        form.getTextField('fill_12_2').setText(formData.doctorate || "");
        form.getTextField('fill_13_2').setText(formData.contract_description || "");
        form.getTextField('Text33').setText(formData.scientific_supervisor || "");

        if(formData.is_free_agent) {
            form.getCheckBox('Check Box34').check();
        }

        if(formData.is_public_sector_emloyee) {
            form.getCheckBox('Check Box35').check();
        }

        if(formData.added_value_tax_on) {
            form.getCheckBox('Check Box36').check();
        }

        if(formData.added_value_tax_off) {
            form.getCheckBox('Check Box37').check();
        }


        form.getTextField('Date38_af_date').setText(formData.declaration_date ? dayjs(formData.declaration_date).format('DD-MMM-YYYY') : '');
        // form.getSignature('Signature45').setText(form_data.first_name + ' ' + form_data.lastname + ' ' + dayjs().format('DD-MMM-YYYY') )
        // form.getTextField('FLD18').setText(form_data.project_num ? form_data.project_num.toString() : '')
        //
        // form.getTextField('FLD4').setText(form_data.date ? dayjs(form_data.date).format('DD-MMM-YYYY') : '')
        //
        // form.getTextField('FLD22').setText(forceUppercaseGreek(form_data.default_unit_name) || "")
    }


//ΑΙΤΗΣΗ ΑΔΕΙΑΣ
export const fillLeaveOfAbsensePetitionForm = (form: PDFForm, formData: any) => {

        form.getTextField('FLD22').setText(formData.unit || "")
        form.getTextField('FLD4').setText(formData.application_date ? dayjs(formData.application_date).format('DD-MMM-YYYY') : "")
        form.getTextField('FLD19').setText(formData.protocol_num || "")
        form.getTextField('fill4').setText(formData.surname || "");
        form.getTextField('fill5').setText(formData.firstname || "");
        form.getTextField('fill6').setText(formData.phone || "");
        form.getTextField('Fill7').setText(formData.email || "");
        form.getTextField('Fill8').setText(formData.date_from ? dayjs(formData.date_from).format('DD-MMM-YYYY') : "");
        form.getTextField('fill_15').setText(formData.date_to ? dayjs(formData.date_to).format('DD-MMM-YYYY') : "");
        form.getTextField('Text1').setText(formData.dates || "");

        if (formData.typos_adeias === 'regular_leave') {
            form.getCheckBox('Check Box1').check();
        }

        if (formData.typos_adeias === 'computer_leave') {
            form.getCheckBox('Check Box7').check();
        }

        if (formData.typos_adeias === 'parental_leave') {
            form.getCheckBox('Check Box2').check();
        }

        if (formData.typos_adeias === 'blood_leave') {
            form.getCheckBox('Check Box8').check();
        }

        if (formData.typos_adeias === 'death_leave') {
            form.getCheckBox('Check Box3').check();
        }

        if (formData.typos_adeias === 'travel_leave') {
            form.getCheckBox('Check Box9').check();
        }

        if (formData.typos_adeias === 'unpaid_leave') {
            form.getCheckBox('Check Box4').check();
        }

        if (formData.typos_adeias === 'judicial_leave') {
            form.getCheckBox('Check Box10').check();
        }

        if (formData.typos_adeias === 'elections_leave') {
            form.getCheckBox('Check Box5').check();
        }

        if (formData.typos_adeias === 'research_leave') {
            form.getCheckBox('Check Box11').check();
        }

        if (formData.typos_adeias === 'marital_leave') {
            form.getCheckBox('Check Box6').check();
        }

        form.getTextField('Text12').setText(formData.other_leave_reason || "")

        // form.getSignature('Signature1').setText(form_data.first_name + ' ' + form_data.lastname + ' ' + dayjs().format('DD-MMM-YYYY') )
        // form.getSignature('Signature2').setText(form_data.first_name + ' ' + form_data.lastname + ' ' + dayjs().format('DD-MMM-YYYY') )
        // form.getSignature('Signature3').setText(form_data.first_name + ' ' + form_data.lastname + ' ' + dayjs().format('DD-MMM-YYYY') )
    }

// Function handling petition PDF files dynamically
export const fillPetition = (form : PDFForm, formData : any, formSlug : any)=>{
    switch (formSlug) {
        case 'aitisi-simvasis-form': {
            fillContractPetitionForm(form, formData);
        }

        break;

        case 'aitisi-adeias': {
            fillLeaveOfAbsensePetitionForm(form, formData);
        }

        break;

        default:
            throw Error('missing pdf field mapping for this form')
    }
}
