var phRegion, phProvince, phBrgy, phCity, cluster, phCityDesc, phProvinceDesc;


async function load_phRegion(){
    if (!phRegion) {
        getJsonData('web/fetch_static', 'ph_region',null,null).then(async function(data) {
            if (!data.status) {
                sys_toast_warning(data.message);
                return false;
            }
            phRegion = data.data;
            phRegion = phRegion.map(function(item) {
                return { id: item.regCode, text: item.regDesc, value: item.regCode }
            });
    
            $('select[data-render=region]').select2({
                placeholder: 'Select Region',
                data: phRegion,
            });
        });    
    }
}


$(document).delegate('select[data-render=region]', 'change', async function() {
    var region_id   = $(this).find(':selected').val();
    var refreshElem = $(this).closest('.location-container').find('select[data-render=province]');
    await load_phProvince(refreshElem, region_id);
});

async function load_phProvince(refreshElem ='',region_id=''){
    var is_val = false;    
    var do_map = true;
    if(!refreshElem) {
        refreshElem = $('select[data-render=province]');
    }else{
        if(region_id == '') do_map = false;
    }
    if (!phProvince) {
        if(do_map == true){
            getJsonData('web/fetch_static', 'ph_province',null,null,'provDesc','ASC').then(async function(data) {
                if (!data.status) {
                    sys_toast_warning(data.message);
                    return false;
                }
                phProvince = data.data;
                phProvince = phProvince.map(function(item) {
                    return { id: item.provCode, text: item.provDesc, value: item.provCode, regCode: item.regCode }
                });
                await fill_up_province(is_val,do_map,refreshElem,region_id);
            });  
        }  
    }else{
        await fill_up_province(is_val,do_map,refreshElem,region_id);
    }
}

async function fill_up_province(is_val,do_map,refreshElem,region_id){
    var data = [];
    
    if(do_map == true) {
        phProvince.forEach(function(item) {
            if(refreshElem && region_id){
                if(item.regCode == region_id) {
                    data.push(item);
                    if(item.id == refreshElem.val() && is_val == false) is_val = true;
                }
            }else{
                data.push(item);
            }
        });

        refreshElem.empty().select2({
            placeholder: 'Select Province',
            data: data,
        });
    
        if(is_val == true) {
            refreshElem.val(refreshElem.val()).trigger('change');
        }else{
            refreshElem.val(null).trigger('change');
        }
    }else{
        refreshElem.val(null).trigger('change');
    }
}

$(document).delegate('select[data-render=province]', 'change', async function() {
    var province_id = $(this).find(':selected').val();
    var refreshElem = $(this).closest('.location-container').find('select[data-render=city]');
    await load_phCity(refreshElem, province_id);
});

async function load_phCity(refreshElem ='',province_id=''){
    var is_val = false;
    var do_map = true;
    if(!refreshElem) {
        refreshElem = $('select[data-render=city]');
    }else{
        if(province_id == '') do_map = false;
    }
    if (!phCity) {
        if(do_map == true){
            getJsonData('web/fetch_static', 'ph_city',null,null,'citymunDesc','ASC').then(async function(data) {
                if (!data.status) {
                    sys_toast_warning(data.message);
                    return false;
                }
                phCity = data.data;
                phCity = phCity.map(function(item) {
                    return { id: item.citymunCode, text: item.citymunDesc, value: item.citymunCode, provCode: item.provCode }
                });
    
                await fill_up_city(is_val,do_map,refreshElem,province_id);
            });
        }    
    }else{
        await fill_up_city(is_val,do_map,refreshElem,province_id);
    }
}

async function fill_up_city(is_val,do_map,refreshElem,province_id){
    var data = [];

    if(do_map == true) {
        phCity.forEach(function(item) {
            if(refreshElem && province_id){
                if(item.provCode == province_id) {
                    data.push(item);
                    if(item.id == refreshElem.val() && is_val == false) is_val = true;
                }
            }else{
                data.push(item);
            }
        });

        refreshElem.empty().select2({
            placeholder: 'Select City/Municipality',
            data: data,
        });
        
        if(is_val == true) {
            refreshElem.val(refreshElem.val()).trigger('change');
        }else{
            refreshElem.val(null).trigger('change');
        }
    }else{
        refreshElem.val(null).trigger('change');
    }
}

async function load_cluster()
{
    if (!cluster) {
        getJsonData('web/fetch_static', 'clusters',null,null).then(async function(data) {
            if (!data.status) {
                sys_toast_warning(data.message);
                return false;
            }
            cluster = data.data;
            cluster = cluster.map(function(item) {
                return { id: item.id, text: item.name, value: item.id }
            });
    
            $('select[data-render=cluster]').select2({
                placeholder: 'Select Cluster',
                data: cluster,
            });
        });    
    }
}

$(document).delegate('select[data-render=cluster]', 'change', async function() {
    var cluster_id   = $(this).find(':selected').val();
    var refreshElem = $(this).closest('.location-container').find('select[data-render=cluster]');
    await load_cluster(refreshElem, cluster_id);
});

async function load_phProvinceDesc(refreshElem =''){
    var is_val = false;    
    var do_map = true;
    
        refreshElem = $('select[data-render=provinceDesc]');
    
    if (!phProvinceDesc) {
        if(do_map == true){
            getJsonData('sys/cluster_cities/get_unassigned_provincesCities', 'province',null,null,'province','ASC').then(async function(data) {
                if (!data.status) {
                    sys_toast_warning(data.message);
                    return false;
                }
                phProvinceDesc = data.data;
                phProvinceDesc = phProvinceDesc.map(function(item) {
                    return { id: item.provDesc, text: item.provDesc, value: item.provDesc, regCode: item.regCode }
                });
                await fill_up_provinceDesc(is_val,do_map,refreshElem);
            });  
        }  
    }else{
        await fill_up_provinceDesc(is_val,do_map,refreshElem);
    }
}

async function fill_up_provinceDesc(is_val,do_map,refreshElem){
    var data = [];
    
    if(do_map == true) {
        phProvinceDesc.forEach(function(item) {
            
                data.push(item);
            
        });

        refreshElem.empty().select2({
            placeholder: 'Select Province',
            data: data,
        });
    
        if(is_val == true) {
            refreshElem.val(refreshElem.val()).trigger('change');
        }else{
            refreshElem.val(null).trigger('change');
        }
    }else{
        refreshElem.val(null).trigger('change');
    }
}

$(document).delegate('select[data-render=provinceDesc]', 'change', async function() {
    var provDesc = $(this).find(':selected').val();
    var refreshElem = $(this).closest('.location-container').find('select[data-render=cityDesc]');
    await load_phCityDesc(refreshElem, provDesc);
});

async function load_phCityDesc(refreshElem ='',province_desc=''){
    var is_val = false;
    var do_map = true;
    if(!refreshElem) {
        refreshElem = $('select[data-render=cityDesc]');
    }else{
        if(province_desc == '') do_map = false;
    }

    if (!phCityDesc) {
        if(do_map == true){
            getJsonData('sys/cluster_cities/get_unassigned_provincesCities', 'city',null,null,'city','ASC').then(async function(data) {
                if (!data.status) {
                    sys_toast_warning(data.message);
                    return false;
                }
                phCityDesc = data.data;
                phCityDesc = phCityDesc.map(function(item) {
                    return { id: item.citymunDesc, text: item.citymunDesc, value: item.citymunDesc, provDesc: item.provDesc }
                });
    
                await fill_up_cityDesc(is_val,do_map,refreshElem,province_desc);
            });
        }    
    }else{
        await fill_up_cityDesc(is_val,do_map,refreshElem,province_desc);
    }
}

async function fill_up_cityDesc(is_val,do_map,refreshElem,province_desc){
    var data = [];
    if(do_map == true) {
        phCityDesc.forEach(function(item) {
            if(refreshElem && province_desc){
                if(item.provDesc == province_desc) {
                    
                    data.push(item);
                    if(item.id == refreshElem.val() && is_val == false) is_val = true;
                }
            }else{
                data.push(item);
            }
        });

        refreshElem.empty().select2({
            placeholder: 'Select City/Municipality',
            data: data,
        });
        
        if(is_val == true) {
            refreshElem.val(refreshElem.val()).trigger('change');
        }else{
            refreshElem.val(null).trigger('change');
        }
    }else{
        refreshElem.val(null).trigger('change');
    }
}