// 1 => LOADING
// 2 => DONE
// 3 => ERROR
import * as api from "../api/user.js"

export default {
    namespaced: true,
    state: {
        last_id: -1,
        act: 'new',
        lookup_user: 0,
        lookup_error_message: '',
        users: [],
        total_users: 0,
        total_filter_users: 0,
        selected_user: {
            name: ""
        },
        save_status: 0,
        save_error_message: '',
        dialog_form_user: false,
        dialog_edit_form_user: false,
        alert_success: false,
        msg_success: "",
        show_all: 'N',
        errors: [],
        usertypes: [],
        usertype: {},
        doctors: [],
        doctor: {},
        get_data_status: 0,
        get_data_error_message: '',
        cities: [],
        detail_address: {},
        autocomplete_status: 0,
        search_status: 0,
        districts: [],
        district_address: {},
        kelurahans: [],
        kelurahan_address: {},
        instruments: [],
        instrument: {},
        autotemplates: [],
        autotemplate: {},
        nonlabs: [],
        selected_nonlab: {},
        current_page: 1,
        x_search: '',
        selected_filter_sex: {},
        selected_filter_flag: {},
        f_sexs: [],
        f_flags: []
    },
    mutations: {
        update_selected_filter_sex(state, val) {
            state.selected_filter_sex = val
        },
        update_selected_filter_flag(state, val) {
            state.selected_filter_flag = val
        },
        update_f_sexs(state, val) {
            state.f_sexs = val
        },
        update_f_flags(state, val) {
            state.f_flags = val
        },
        update_x_search(state, val) {
            state.x_search = val
        },
        update_current_page(state, val) {
            state.current_page = val
        },
        update_last_id(state, val) {
            state.last_id = val
        },
        update_act(state, val) {
            state.act = val
        },
        update_errors(state, val) {
            state.errors = val
        },
        update_show_all(state, val) {
            state.show_all = val
        },
        update_lookup_error_message(state, status) {
            state.lookup_error_message = status
        },
        update_lookup_user(state, status) {
            state.lookup_user = status
        },
        update_users(state, data) {
            state.users = data.records
            state.total_users = data.total
            state.total_filter_users = data.total_filter
        },
        update_selected_user(state, val) {
            state.selected_user = val
        },
        update_save_status(state, val) {
            state.save_status = val
        },
        update_save_error_message(state, val) {
            state.save_error_message = val
        },
        update_dialog_form_user(state, val) {
            state.dialog_form_user = val
        },
        update_dialog_edit_form_user(state, val) {
            state.dialog_edit_form_user = val
        },
        update_alert_success(state, val) {
            state.alert_success = val
        },
        update_msg_success(state, val) {
            state.msg_success = val
        },
        update_usertypes(state, data) {
            state.usertypes = data
        },
        update_usertype(state, val) {
            state.usertype = val
        },
        update_doctors(state, data) {
            state.doctors = data
        },
        update_doctor(state, val) {
            state.doctor = val
        },
        update_get_data_status(state, val) {
            state.get_data_status = val
        },
        update_get_data_error_message(state, val) {
            state.get_data_error_message = val
        },
        update_cities(state, val) {
            state.cities = val
        },
        update_detail_address(state, val) {
            state.detail_address = val
        },
        update_autocomplete_status(state, val) {
            state.autocomplete_status = val
        },
        update_districts(state, val) {
            state.districts = val
        },
        update_district_address(state, val) {
            state.district_address = val
        },
        update_kelurahans(state, val) {
            state.kelurahans = val
        },
        update_kelurahan_address(state, val) {
            state.kelurahan_address = val
        },
        update_instruments(state, data) {
            state.instruments = data
        },
        update_instrument(state, val) {
            state.instrument = val
        },
        update_autotemplates(state, data) {
            state.autotemplates = data
        },
        update_autotemplate(state, val) {
            state.autotemplate = val
        },
        update_nonlabs(state, val) {
            state.nonlabs = val
        },
        update_selected_nonlab(state, val) {
            state.selected_nonlab = val
        }


    },
    actions: {
        async lookup(context, prm) {
            context.commit("update_lookup_user", 1)
            try {
                prm.token = one_token()
                let resp = await api.lookup(prm)
                if (resp.status != "OK") {
                    context.commit("update_lookup_user", 3)
                    context.commit("update_lookup_error_message", resp.message)
                } else {
                    context.commit("update_lookup_user", 2)
                    context.commit("update_lookup_error_message", "")
                    let data = {
                        records: resp.data.records,
                        total: resp.data.total,
                        total_filter: resp.data.total_filter
                    }
                    context.commit("update_users", data)
                }
            } catch (e) {
                context.commit("update_lookup_user", 3)
                context.commit("update_lookup_error_message", e.message)
            }
        },
        async lookupbyname(context, prm) {
            context.commit("update_lookup_user", 1)
            try {
                prm.token = one_token()
                let resp = await api.lookupbyname(prm)
                if (resp.status != "OK") {
                    context.commit("update_lookup_user", 3)
                    context.commit("update_lookup_error_message", resp.message)
                } else {
                    context.commit("update_lookup_user", 2)
                    context.commit("update_lookup_error_message", "")
                    let data = {
                        records: resp.data.records,
                        total: resp.data.total,
                        total_filter: resp.data.total_filter
                    }
                    context.commit("update_users", data)
                    if (prm.lastid === -1) {
                        var pat = data.records[0]
                        context.commit("update_selected_user", data.records[0])
                        if (prm.user != "") {
                            context.dispatch("report/lookup", {
                                id: pat.id,
                                reportina: '',
                                reporteng: '',
                                status: 'A',
                                current_page: 1,
                                lastid: -1
                            }, {
                                root: true
                            })
                            context.commit("detail/update_autousers", [{
                                Nat_NormalValueID: pat.Nat_NormalValueID,
                                Nat_NormalValueName: pat.Nat_NormalValueName
                            }], {
                                root: true
                            })
                            context.commit("detail/update_autouser", {
                                Nat_NormalValueID: pat.Nat_NormalValueID,
                                Nat_NormalValueName: pat.Nat_NormalValueName
                            }, {
                                root: true
                            })
                        }
                    }else{
                        var pat = data.records[prm.lastid]
                        context.commit("update_selected_user", data.records[prm.lastid])
                        if (prm.user != "") {
                            context.dispatch("report/lookup", {
                                id: pat.id,
                                reportina: '',
                                reporteng: '',
                                status: 'A',
                                current_page: 1,
                                lastid: -1
                            }, {
                                root: true
                            })
                            context.commit("detail/update_autousers", [{
                                Nat_NormalValueID: pat.Nat_NormalValueID,
                                Nat_NormalValueName: pat.Nat_NormalValueName
                            }], {
                                root: true
                            })
                            context.commit("detail/update_autouser", {
                                Nat_NormalValueID: pat.Nat_NormalValueID,
                                Nat_NormalValueName: pat.Nat_NormalValueName
                            }, {
                                root: true
                            })
                        }
                    }
                    

                }
            } catch (e) {
                context.commit("update_lookup_user", 3)
                context.commit("update_lookup_error_message", e.message)
            }
        },
        async getsexreg(context) {
            context.commit("update_get_data_status", 1)
            try {
                let resp = await api.getsexreg(one_token())
                if (resp.status != "OK") {
                    context.commit("update_get_data_status", 3)
                } else {
                    context.commit("update_get_data_status", 2)
                    let data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_f_sexs", data.records.f_sexs)
                    context.commit("update_f_flags", data.records.f_flags)
                    context.commit("report/update_f_statuss", data.records.f_statuss,{
                        root: true
                    })
                    context.commit("update_selected_filter_sex", data.records.f_sexs[0])
                    context.commit("update_selected_filter_flag", data.records.f_flags[0])
                    context.commit("report/update_selected_filter_status", data.records.f_statuss[0],{
                        root: true
                    })
                    prm.sexid = data.records.f_sexs[0].Nat_SexID
                    prm.flagid = data.records.f_flags[0].Nat_FlagID
                    context.dispatch("lookupbyname", prm)
                }
            } catch (e) {
                context.commit("update_get_data_status", 3)
            }
        },
        async save(context, prm) {
            context.commit("update_save_status", 1)
            try {
                prm.token = one_token()
                let resp = await api.save(prm)
                if (resp.status != "OK") {
                    context.commit("update_save_status", 3)
                    context.commit("update_save_error_message", resp.message)
                } else {
                    context.commit("update_save_status", 2)
                    context.commit("update_save_error_message", resp.message)
                    context.commit("update_save_error_message", resp.message)
                    var data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }

                    if (data.total !== -1) {
                        context.commit("update_errors", [])
                        context.commit("update_alert_success", true)
                        context.commit("update_dialog_form_user", false)
                        var msg = "Kelompok Hasil" + prm.name + " sudah tersimpan dong ..."
                        context.commit("update_msg_success", msg)
                        context.dispatch("lookupbyname", {
                            user: prm.suser,
                            detail: prm.sdetail,
                            district: prm.sdistrict,
                            kelurahan: prm.skelurahan,
                            current_page: 1,
                            lastid: -1
                        })
                    } else {
                        context.commit("update_errors", resp.data.errors)

                    }

                }
            } catch (e) {
                context.commit("update_save_status", 3)
                context.commit("update_save_error_message", e.message)
                console.log(e)
            }
        },
        async update(context, prm) {
            context.commit("update_save_status", 1)
            try {
                prm.token = one_token()
                let resp = await api.update(prm)
                if (resp.status != "OK") {
                    context.commit("update_save_status", 3)
                    context.commit("update_save_error_message", resp.message)
                } else {
                    context.commit("update_save_status", 2)
                    context.commit("update_save_error_message", resp.message)
                    context.commit("update_save_error_message", resp.message)
                    let data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }

                    if (data.total !== -1) {
                        context.commit("update_alert_success", true)
                        context.commit("update_dialog_form_user", false)
                        var msg = "Kelompok Hasil" + prm.name + " sudah terupdate dong ..."
                        context.commit("update_msg_success", msg)
                        context.dispatch("lookupbyname", {
                            user: prm.suser,
                            detail: prm.sdetail,
                            district: prm.sdistrict,
                            kelurahan: prm.skelurahan,
                            current_page: 1,
                            lastid: -1
                        })
                    } else {
                        context.commit("update_errors", resp.data.errors)

                    }

                }
            } catch (e) {
                context.commit("update_save_status", 3)
                context.commit("update_save_error_message", e.message)
                console.log(e)
            }
        },
        async delete(context, prm) {
            context.commit("update_save_status", 1)
            try {
                let resp = await api.xdelete(one_token(), prm.userid)
                if (resp.status != "OK") {
                    context.commit("update_save_status", 3)
                    context.commit("update_save_error_message", resp.message)
                } else {
                    context.commit("update_save_status", 2)
                    context.commit("update_save_error_message", resp.message)
                    context.commit("update_alert_success", true)

                    var msg = "Kelompok Hasil" + prm.name + " sudah dihapus dong"
                    context.commit("update_msg_success", msg)
                    context.commit("update_alert_success", true)
                    context.commit("update_selected_user", {})
                    context.dispatch("lookupbyname", {
                        user: prm.suser,
                        detail: prm.sdetail,
                        current_page: 1,
                        lastid: -1
                    })
                    context.dispatch("detail/lookupbyname", {
                        user: prm.suser,
                        detail: prm.sdetail,
                        current_page: 1,
                        lastid: -1
                    }, {
                        root: true
                    })
                }
            } catch (e) {
                context.commit("update_save_status", 3)
                console.log(e)
            }
        },
        async selectnonlab(context) {
            context.commit("update_get_data_status", 1)
            try {
                let resp = await api.selectnonlab(one_token())
                if (resp.status != "OK") {
                    context.commit("update_get_data_status", 3)
                    context.commit("update_get_data_error_message", resp.message)
                } else {
                    context.commit("update_get_data_status", 2)
                    context.commit("update_get_data_error_message", "")
                    context.commit("update_nonlabs", resp.data.records.nonlabs)
                }
            } catch (e) {
                context.commit("update_get_data_status", 3)
                context.commit("update_get_data_error_message", e.message)
                console.log(e)
            }
        },
        async selectdoctor(context) {
            context.commit("update_get_data_status", 1)
            try {
                let resp = await api.selectdoctor(one_token())
                if (resp.status != "OK") {
                    context.commit("update_get_data_status", 3)
                    context.commit("update_get_data_error_message", resp.message)
                } else {
                    context.commit("update_get_data_status", 2)
                    context.commit("update_get_data_error_message", "")
                    context.commit("update_doctors", resp.data.records.doctors)
                }
            } catch (e) {
                context.commit("update_get_data_status", 3)
                context.commit("update_get_data_error_message", e.message)
                console.log(e)
            }
        },
        async searchdetail(context, prm) {
            context.commit("update_autocomplete_status", 1)
            try {
                let resp = await api.searchdetail(one_token(), prm)
                if (resp.status != "OK") {
                    context.commit("update_autocomplete_status", 3)
                } else {
                    context.commit("update_autocomplete_status", 2)
                    let data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_cities", resp.data.records)
                }
            } catch (e) {
                context.commit("update_autocomplete_status", 3)
            }
        },
        async searchdoctor(context, prm) {
            context.commit("update_autocomplete_status", 1)
            try {
                let resp = await api.searchdoctor(one_token(), prm)
                if (resp.status != "OK") {
                    context.commit("update_autocomplete_status", 3)
                } else {
                    context.commit("update_autocomplete_status", 2)
                    let data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_doctors", resp.data.records)
                }
            } catch (e) {
                context.commit("update_autocomplete_status", 3)
            }
        },
        async searchinstrument(context, prm) {
            context.commit("update_autocomplete_status", 1)
            try {
                let resp = await api.searchinstrument(one_token(), prm.tes)
                if (resp.status != "OK") {
                    context.commit("update_autocomplete_status", 3)
                } else {
                    context.commit("update_autocomplete_status", 2)
                    let data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_instruments", resp.data.records)
                }
            } catch (e) {
                context.commit("update_autocomplete_status", 3)
            }
        },
        async searchtemplate(context, prm) {
            context.commit("update_autocomplete_status", 1)
            try {
                let resp = await api.searchtemplate(one_token(), prm.tes)
                if (resp.status != "OK") {
                    context.commit("update_autocomplete_status", 3)
                } else {
                    context.commit("update_autocomplete_status", 2)
                    let data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_autotemplates", resp.data.records)
                }
            } catch (e) {
                context.commit("update_autocomplete_status", 3)
            }
        },
        async getdistrict(context, prm) {
            context.commit("update_get_data_status", 1)
            try {
                let resp = await api.getdistrict(one_token(), prm)
                if (resp.status != "OK") {
                    context.commit("update_get_data_status", 3)
                } else {
                    context.commit("update_get_data_status", 2)
                    let data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_districts", resp.data.records)
                }
            } catch (e) {
                context.commit("update_get_data_status", 3)
            }
        },
        async getkelurahan(context, prm) {
            context.commit("update_get_data_status", 1)
            try {
                let resp = await api.getkelurahan(one_token(), prm)
                if (resp.status != "OK") {
                    context.commit("update_get_data_status", 3)
                } else {
                    context.commit("update_get_data_status", 2)
                    let data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_kelurahans", resp.data.records)
                }
            } catch (e) {
                context.commit("update_get_data_status", 3)
            }
        }
    }
}