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

export default {
    namespaced: true,
    state: {
        reports: [],
        save_status: 0,
        save_error_message: '',
        dialog_form_report: false,
        dialog_status_order: false,
        lookup_report: 0,
        search_status: 0,
        errors: [],
        startdate: moment(new Date()).format('YYYY-MM-DD'),
        enddate: moment(new Date()).format('YYYY-MM-DD'),
        bases: [],
        base: {},
        omzettypes: [],
        omzettype: {},
        reporttypes: [],
        reporttype: {},
        agingtypes: [],
        agingtype: {},
        statuss: [],
        autousers:[],
        autouser:{},
        autocitys:[],
        autocity:{},
        autodistricts:[],
        autodistrict:{},
        autokelurahans:[],
        autokelurahan:{},
        autotests:[],
        autotest:{},
        automous:[],
        automou:{},
        autodoctors:[],
        autodoctor:{},
        addressdoctors:[],
        addressdoctor:{},
        current_page:1,
        x_search: '',
        total_data: 0,
        selected_report: {
            name: ""
        },
        get_data_status: 0,
        get_data_error_message: '',
        new_report:'',
        value_new_report:'',
        new_reportname:'',
        value_new_reportname:'',
        selected_filter_status: {},
        f_statuss: [],
        reportcode:'',
        reportgroup: '',
        reportname:''
    },
    mutations: {
        update_reportgroup(state, val) {
            state.reportgroup = val
        },
        update_reportcode(state, val) {
            state.reportcode = val
        },
        update_reportname(state, val) {
            state.reportname = val
        },
        update_selected_filter_status(state, val) {
            state.selected_filter_status = val
        },
        update_f_statuss(state, val) {
            state.f_statuss = val
        },
        update_value_new_report(state, val){
            state.value_new_report = val
        },
        update_new_report(state, val) {
            state.new_report = val
        },
        update_value_new_reportname(state, val){
            state.value_new_reportname = val
        },
        update_new_reportname(state, val) {
            state.new_reportname = val
        },
        update_selected_report(state, val) {
            state.selected_report = val
        },
        update_x_search(state, val) {
            state.x_search = val
        },
        update_current_page(state, val) {
            state.current_page = val
        },
        update_total_data(state, val) {
            state.total_data = val
        },
        update_autousers(state,data){
            state.autousers = data
        },
        update_autouser(state,val){
            state.autouser = val
        },
        update_autocitys(state,data){
            state.autocitys = data
        },
        update_autocity(state,val){
            state.autocity = val
        },
        update_autotests(state,data){
            state.autotests = data
        },
        update_autotest(state,val){
            state.autotest = val
        },
        update_automous(state,data){
            state.automous = data
        },
        update_automou(state,val){
            state.automou = val
        },
        update_autodoctors(state,data){
            state.autodoctors = data
        },
        update_autodoctor(state,val){
            state.autodoctor = val
        },
        update_addressdoctors(state,data){
            state.addressdoctors = data
        },
        update_addressdoctor(state,val){
            state.addressdoctor = val
        },
        update_autodistricts(state,data){
            state.autodistricts = data
        },
        update_autodistrict(state,val){
            state.autodistrict = val
        },
        update_autokelurahans(state,data){
            state.autokelurahans = data
        },
        update_autokelurahan(state,val){
            state.autokelurahan = val
        },
        update_errors(state, val) {
            state.errors = val
        },
        update_reports(state, data) {
            state.reports = data
        },
        update_save_status(state, val) {
            state.save_status = val
        },
        update_save_error_message(state, val) {
            state.save_error_message = val
        },
        update_dialog_form_report(state, val) {
            state.dialog_form_report = val
        },
        update_lookup_report(state, val) {
            state.lookup_report = val
        },
        update_startdate(state, val) {
            state.startdate = val
        },
        update_enddate(state, val) {
            state.enddate = val
        },
        update_bases(state, data) {
            state.bases = data
        },
        update_base(state, val) {
            state.base = val
        },
        update_omzettypes(state, data) {
            state.omzettypes = data
        },
        update_omzettype(state, val) {
            state.omzettype = val
        },
        update_reporttypes(state, data) {
            state.reporttypes = data
        },
        update_reporttype(state, val) {
            state.reporttype = val
        },
        update_agingtypes(state, data) {
            state.agingtypes = data
        },
        update_agingtype(state, val) {
            state.agingtype = val
        },
        update_search_status(state, val) {
            state.search_status = val
        },
        update_statuss(state, data) {
            state.statuss = data
        },
        update_dialog_status_order(state, val) {
            state.dialog_status_order = 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
        }
    },
    actions: {
        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 {
                    var data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }
                    if (data.total !== -1) {
                        context.commit("update_save_status", 2)
                        context.commit("update_save_error_message", resp.message)
                        context.commit("user/update_alert_success", true, {
                            root: true
                        })

                        context.commit("update_dialog_form_report", false)
                        var msg = "Saran sudah disimpan dong"
                        context.commit("user/update_msg_success", msg, {
                            root: true
                        })
                        context.commit("user/update_alert_success", true, {
                            root: true
                        })
                        context.dispatch("lookup", {
                            id: prm.userid,
                            reportgroup: '',
                        reportcode: '',
                        reportname: '',
                        status: prm.filterstatus,
                        current_page: prm.current_page,
                        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 saveaddeditreport(context, prm) {
            context.commit("update_save_status", 1)
            try {
                prm.token = one_token()
                let resp = await api.saveaddeditreport(prm)
                if (resp.status != "OK") {
                    context.commit("update_save_status", 3)
                    context.commit("update_save_error_message", resp.message)
                } else {
                    var data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }
                    if (data.total !== -1) {
                        context.commit("update_save_status", 2)
                        context.commit("update_save_error_message", resp.message)
                        context.commit("user/update_alert_success", true, {
                            root: true
                        })

                        context.commit("update_dialog_form_report", false)
                        var msg = ''
                        if(prm.status === 'N'){
                        msg = "Laporan "+prm.name+" batal dipilih"
                        }else{
                        msg = "Laporan "+prm.name+" berhasil dipilih"
                        }
                        context.commit("user/update_msg_success", msg, {
                            root: true
                        })
                        context.commit("user/update_alert_success", true, {
                            root: true
                        })
                        context.dispatch("lookup", {
                            id: prm.userid,
                            reportgroup: prm.reportgroup,
                        reportcode: prm.reportcode,
                        reportname: prm.reportname,
                        status: prm.filterstatus,
                        current_page: prm.current_page,
                        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 saveallreportdetail(context, prm) {
            context.commit("update_save_status", 1)
            try {
                prm.token = one_token()
                let resp = await api.saveallreportdetail(prm)
                if (resp.status != "OK") {
                    context.commit("update_save_status", 3)
                    context.commit("update_save_error_message", resp.message)
                } else {
                    var data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }
                    if (data.total !== -1) {
                        context.commit("update_save_status", 2)
                        context.commit("update_save_error_message", resp.message)
                        context.commit("user/update_alert_success", true, {
                            root: true
                        })

                        context.commit("update_dialog_form_report", false)
                        var msg = "Saran sudah disimpan dong"
                        context.commit("user/update_msg_success", msg, {
                            root: true
                        })
                        context.commit("user/update_alert_success", true, {
                            root: true
                        })
                        context.dispatch("lookup", {
                            id: prm.userid,
                            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 lookupx(context, prm) {
            context.commit("update_lookup_report", 1)
            try {
                let resp = await api.lookupx(one_token(), prm.id)
                if (resp.status != "OK") {
                    context.commit("update_lookup_report", 3)
                } else {
                    context.commit("update_lookup_report", 2)
                    let data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_reports", data.records)
                }
            } catch (e) {
                context.commit("update_lookup_report", 3)
            }
        },
        async lookup(context, prm) {
            context.commit("update_save_status", 1)
            try {
                prm.token = one_token()
                let resp = await api.lookup(prm)
                if (resp.status != "OK") {
                    context.commit("update_save_status", 3)
                } else {
                    context.commit("update_save_status", 2)
                    let data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_reports", data.records)
                    console.log('status')
                    console.log(data.records.statuss)
                    context.commit("update_statuss", data.records.statuss)
                    context.commit("update_total_data", data.total)

                }
            } catch (e) {
                context.commit("update_save_status", 3)
            }
        },
        async lookupbyname(context, prm) {
            context.commit("update_save_status", 1)
            try {
                prm.token = one_token()
                let resp = await api.lookupbyname(prm)
                if (resp.status != "OK") {
                    context.commit("update_save_status", 3)
                } else {
                    context.commit("update_save_status", 2)
                    let data = {
                        records: resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_reports", data.records)
                    console.log(data.records)
                    context.commit("update_total_data", data.total)
                }
            } catch (e) {
                context.commit("update_save_status", 3)
            }
        },
        async getstatus(context) {
            context.commit("update_get_data_status", 1)
            try {
                let resp = await api.getstatus(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_statuss", data.records.f_statuss)
                    context.commit("update_selected_filter_status", data.records.f_statuss[0])
                    prm.status = data.records.f_statuss[0].M_StatusID
                   // context.dispatch("lookupbyname", prm)
                }
            } catch (e) {
                context.commit("update_get_data_status", 3)
            }
        },
        async delete(context, prm) {
            context.commit("update_save_status", 1)
            try {
                let resp = await api.xdelete(one_token(), prm.xid)
                if (resp.status != "OK") {
                    context.commit("user/update_save_status", 3, {
                        root: true
                    })
                    context.commit("user/update_save_error_message", resp.message, {
                        root: true
                    })
                } else {
                    context.commit("user/update_save_status", 2, {
                        root: true
                    })
                    context.commit("user/update_save_error_message", resp.message, {
                        root: true
                    })
                    context.commit("user/update_alert_success", true, {
                        root: true
                    })

                    //context.commit("update_dialog_form_schedule_promise", false)
                    var msg = "Pemeriksaan sudah dihapus dong"
                    context.commit("user/update_msg_success", msg, {
                        root: true
                    })
                    context.commit("user/update_alert_success", true, {
                        root: true
                    })
                    context.dispatch("lookupbyname", {
                        user: prm.suser,
                        report: prm.sreport,
                        current_page: 1,
                        lastid: -1
                    }) 
                }
            } catch (e) {
                context.commit("update_save_status", 3)
                context.commit("update_save_error_message", e.message)
                console.log(e)
            }
        },
        async searchuser(context,prm) {
            context.commit("user/update_autocomplete_status",1,{root: true})
            try {
                prm.token = one_token()
                let resp= await api.searchuser(prm)
                if (resp.status != "OK") {
                    context.commit("user/update_autocomplete_status",3,{root: true})
                } else {
                    context.commit("user/update_autocomplete_status",2,{root: true})
                    let data = {
                        records : resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_autousers",resp.data.records)
                }
            } catch(e) {
            context.commit("user/update_autocomplete_status",3,{root: true})
            }
        },
        async searchcity(context,prm) {
            context.commit("user/update_autocomplete_status",1,{root: true})
            try {
                prm.token = one_token()
                let resp= await api.searchcity(prm)
                if (resp.status != "OK") {
                    context.commit("user/update_autocomplete_status",3,{root: true})
                } else {
                    context.commit("user/update_autocomplete_status",2,{root: true})
                    let data = {
                        records : resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_autocitys",resp.data.records)
                }
            } catch(e) {
            context.commit("user/update_autocomplete_status",3,{root: true})
            }
        },
        async searchdistrict(context,prm) {
            context.commit("user/update_autocomplete_status",1,{root: true})
            try {
                prm.token = one_token()
                let resp= await api.searchdistrict(prm)
                if (resp.status != "OK") {
                    context.commit("user/update_autocomplete_status",3,{root: true})
                } else {
                    context.commit("user/update_autocomplete_status",2,{root: true})
                    let data = {
                        records : resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_autodistricts",resp.data.records)
                }
            } catch(e) {
            context.commit("user/update_autocomplete_status",3,{root: true})
            }
        },
        async searchkelurahan(context,prm) {
            context.commit("user/update_autocomplete_status",1,{root: true})
            try {
                prm.token = one_token()
                let resp= await api.searchkelurahan(prm)
                if (resp.status != "OK") {
                    context.commit("user/update_autocomplete_status",3,{root: true})
                } else {
                    context.commit("user/update_autocomplete_status",2,{root: true})
                    let data = {
                        records : resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_autokelurahans",resp.data.records)
                }
            } catch(e) {
            context.commit("user/update_autocomplete_status",3,{root: true})
            }
        },
        async searchtest(context,prm) {
            context.commit("user/update_autocomplete_status",1,{root: true})
            try {
                prm.token = one_token()
                let resp= await api.searchtest(prm)
                if (resp.status != "OK") {
                    context.commit("user/update_autocomplete_status",3,{root: true})
                } else {
                    context.commit("user/update_autocomplete_status",2,{root: true})
                    let data = {
                        records : resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_autotests",resp.data.records)
                }
            } catch(e) {
            context.commit("user/update_autocomplete_status",3,{root: true})
            }
        },
        async searchmou(context,prm) {
            context.commit("user/update_autocomplete_status",1,{root: true})
            try {
                prm.token = one_token()
                let resp= await api.searchmou(prm)
                if (resp.status != "OK") {
                    context.commit("user/update_autocomplete_status",3,{root: true})
                } else {
                    context.commit("user/update_autocomplete_status",2,{root: true})
                    let data = {
                        records : resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_automous",resp.data.records)
                }
            } catch(e) {
            context.commit("user/update_autocomplete_status",3,{root: true})
            }
        },
        async searchdoctor(context,prm) {
            context.commit("user/update_autocomplete_status",1,{root: true})
            try {
                prm.token = one_token()
                let resp= await api.searchdoctor(prm)
                if (resp.status != "OK") {
                    context.commit("user/update_autocomplete_status",3,{root: true})
                } else {
                    context.commit("user/update_autocomplete_status",2,{root: true})
                    let data = {
                        records : resp.data.records,
                        total: resp.data.total
                    }
                    context.commit("update_autodoctors",resp.data.records)
                }
            } catch(e) {
            context.commit("user/update_autocomplete_status",3,{root: true})
            }
        },
        async selectaddressdoctor(context,prm) {
            context.commit("update_get_data_status", 1)
            try {
                prm.token = one_token()
                let resp = await api.selectaddressdoctor(prm)
                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_addressdoctors", resp.data.records.addressdoctors)
                }
            } catch (e) {
                context.commit("update_get_data_status", 3)
                context.commit("update_get_data_error_message", e.message)
                console.log(e)
            }
        }
    }
}