let handlePoskodDetail_NotFound_MyKad = (modal) => {


    let input_negeri = modal.querySelector('input#negeri');
    let input_daerah = modal.querySelector('input#daerah');
    let select_daerah = modal.querySelector('select#select-daerah');

    handlePoskodDetail_NotFound(modal, input_negeri, input_daerah, select_daerah);
}

let handlePoskodDetail_Found_MyKad = (modal) => {

    let input_negeri = modal.querySelector('input#negeri');
    let input_daerah = modal.querySelector('input#daerah');
    let select_daerah = modal.querySelector('select#select-daerah');

    handlePoskodDetail_Found(input_negeri, input_daerah, select_daerah);
}

let handlePoskodDetail_NotFound_Passport = (modal) => {

    let input_negeri = modal.querySelector('input#passport_negeri');
    let input_daerah = modal.querySelector('input#passport_daerah');
    let select_daerah = modal.querySelector('select#select-daerah');

    handlePoskodDetail_NotFound(modal, input_negeri, input_daerah, select_daerah);
}

let handlePoskodDetail_Found_Passport = (modal) => {

    let input_negeri = modal.querySelector('input#passport_negeri');
    let input_daerah = modal.querySelector('input#passport_daerah');
    let select_daerah = modal.querySelector('select#select-daerah');

    handlePoskodDetail_Found(input_negeri, input_daerah, select_daerah);
}

let handlePoskodDetail_NotFound = (modal, input_negeri, input_daerah, select_daerah) => {

    input_daerah.closest('div.col-md-8').style.display = 'none';
    input_daerah.disabled = true;
    input_daerah.required = false;

    select_daerah.closest('div.col-md-8').style.display = 'block';
    select_daerah.disabled = false;
    select_daerah.readOnly = false;
    select_daerah.required = true;

    input_negeri.value = '';
    input_negeri.placeholder = '';

    let getAllNegeri = () => {
        return fetch(api_url + '/api/daerah');
    };

    $(select_daerah).attr("data-placeholder","Sila pilih daerah");
    $(select_daerah).val('').trigger('change');

    getAllNegeri()
        .then(response => response.json())
        .then(x => x.map(y => {
            return {
                "id": y.namadaerah,
                "text": y.namadaerah + ' - ' + y.negeri.negeri,
                "data-koddaerah": y.koddaerah,
            }
        }))
        .then(x => {
            $(select_daerah).select2({
                placeholder: "Sila pilih daerah pelanggan",
                closeOnSelect: true,
                dropdownPosition: 'below',
                data: x,
                dropdownParent: $(modal),
            });
        })
        .then(() => $(select_daerah).val('').trigger('change'));

};

let handlePoskodDetail_Found = (input_negeri, input_daerah, select_daerah) => {

    select_daerah.closest('div.col-md-8').style.display = 'none';
    select_daerah.disabled = 'true';
    select_daerah.required = false;

    input_daerah.closest('div.col-md-8').style.display = 'block';
    input_daerah.disabled = false;
    input_daerah.required = true;

    input_negeri.readOnly = true;
    input_negeri.placeholder = '';
    input_daerah.readOnly = true;
    input_daerah.placeholder = '';
};

$('select.select2-daerah').on('select2:select', function (e) {

    let caller = e.target || e.srcElement;
    let modal = caller.closest('div.modal.fade');
    let input_negeri = modal.querySelector('input[name="negeri"]');

    let selected_daerah = e.params.data;
    let selected_kod_daerah = selected_daerah['data-koddaerah'];

    let getDaerahDetail = (koddaerah) => {
        return fetch(api_url + '/api/daerah/' + koddaerah)
            .then(response => response.json())
            .then(x => fetch(api_url + '/api/negeri/' + x.kodnegeri))
            .then(response => response.json())
    };

    let populatePostcodeRegistrationInputs = (koddaerah, kodnegeri) => {
        const input_koddaerah = document.createElement("input");
        input_koddaerah.className = "d-none";
        input_koddaerah.name = "koddaerah";
        input_koddaerah.value = koddaerah;

        const input_kodnegeri = document.createElement("input");
        input_kodnegeri.className = "d-none";
        input_kodnegeri.name = "kodnegeri";
        input_kodnegeri.value = kodnegeri;

        modal.querySelector('form').appendChild(input_koddaerah);
        modal.querySelector('form').appendChild(input_kodnegeri);
    }

    getDaerahDetail(selected_kod_daerah)
        .then(x => {
            populatePostcodeRegistrationInputs(selected_kod_daerah, x.kodnegeri)
            return x;
        })
        .then(x => input_negeri.value = x.negeri);
});

$('#daftar_pelanggan_mykad_reader textarea#alamat').change(function(){
    let modal = document.querySelector('#daftar_pelanggan_mykad_reader');
    let input_poskod  = modal.querySelector('input#poskod');
    let input_daerah  = modal.querySelector('input#daerah');
    let input_negeri  = modal.querySelector('input#negeri');
    let select_daerah = modal.querySelector('select#select-daerah');

    input_poskod.value = '';
    input_poskod.readOnly = false;

    input_daerah.value = '';
    input_daerah.closest('div.col-md-8').style.display = 'none';
    input_daerah.disabled = true;
    input_daerah.readOnly = true;

    select_daerah.closest('div.col-md-8').style.display = 'block';
    select_daerah.disabled = true;
    select_daerah.readOnly = false;

    // Handle stubborn select2
    let isSelect2exist = modal.querySelector('span.select2');

    if(isSelect2exist){
       modal.querySelector('span.select2')
            .querySelector('span.select2-selection__rendered')
            .textContent = '';

       $(select_daerah).select2('destroy');
    }

    select_daerah.value = ''

    input_negeri.value = '';
    input_negeri.readOnly = true;

    input_poskod.focus();
});
