import axios from "axios";

const state = {
    regiones: null,
    grupos_de_compra: null,
    region_elegida: null,
    grupo_de_compra_elegido: null,
    rol: null,
};

const mutations = {
    setRegiones(state, { regiones }) {
        state.regiones = regiones;
    },
    setRegionYBarrios(state, { region, grupos_de_compra }) {
        state.region_elegida = region;
        state.grupos_de_compra = grupos_de_compra;
    },
    selectGrupoDeCompra(state, { grupo_de_compra }) {
        state.grupo_de_compra_elegido = grupo_de_compra;
    },
    setRol(state, { rol }) {
        state.rol = rol;
    },
};

const actions = {
    async getRegiones({ commit }) {
        const response = await axios.get("/api/regiones");
        commit('setRegiones', { regiones: response.data });
    },
    async selectRegion({ commit }, { region }) {
        const response = await axios.get(`/api/regiones/${region}`);
        commit('setRegionYBarrios', { region: region, grupos_de_compra: response.data });
    },
    async getRol({ commit }) {
        const response = await axios.get("/user/rol");
        commit('setRol', { rol: response.data.rol });
    }
};

const getters = {
    adminUrl() {
        return window.location.pathname.startsWith('/admin');
    },
    mensajes() {
        return {
            mensaje: `Contraseña de ${getters.adminUrl() ? 'administración ' : ''}del barrio`,
            ayuda: `Si no la sabés, consultá a ${getters.adminUrl() ? 'la comisión informática ' : 'tus compañerxs'}.`
        };
    },
    urlRol() {
        let split = window.location.pathname
            .replace('login', '')
            .split('/')
            .filter(x => x.length);
        return split[0] ?? 'pedido';
    },
    titulos() {
        let rol = getters.urlRol();
        switch (rol) {
            case 'admin':
                return { titulo: "Administración de Pedidos MPS", subtitlo: "administración de pedidos" };
            case 'compras':
                return { titulo: "Comisiones MPS", subtitlo: "página de comisiones" };
            case 'pedido':
                return { titulo: "Pedidos MPS", subtitlo: "aplicación de pedidos" };
            default:
                throw new Error("Url inválida");
        }
    },
    textos() {
        let rol = getters.urlRol();
        switch (rol) {
            case 'admin':
                return {
                    titulo: "Administración de Pedidos MPS",
                    subtitlo: "administración de pedidos",
                    password: "Contraseña de administración del barrio",
                    ayuda: "Si no la sabés, consultá a la comisión informática",
                    label: "Seleccioná tu región"
                };
            case 'compras':
                return {
                    titulo: "Comisiones MPS",
                    subtitlo: "página de comisiones",
                    password: "Contraseña del barrio",
                    ayuda: "Si no la sabés, consultá a tus compañerxs",
                    label: "Usuario"
                };
            case 'pedido':
                return {
                    titulo: "Pedidos MPS",
                    subtitlo: "aplicación de pedidos",
                    password: "Contraseña",
                    ayuda: "Si no la sabés, consultá a la comisión informática",
                    label: "Seleccioná tu región"
                };
            default:
                throw new Error("Url inválida");
        }
    },
    estilos() {
        let rol = getters.urlRol();
        switch (rol) {
            case 'admin':
                return {
                    fondo: "has-background-danger",
                    texto: "has-text-white",
                    botones: "is-warning",
                };
            case 'compras':
                return {
                    fondo: "has-background-warning",
                    texto: "",
                    botones: "is-dark"
                };
            case 'pedido':
                return {
                    fondo: "",
                    texto: "",
                    botones: "is-danger"
                };
            default:
                throw new Error("Url inválida");
        }
    },
    nombre() {
        return `${state.grupo_de_compra_elegido}${ getters.urlRol() === 'admin' ? '_admin' : ''}`;
    }
};

export default {
    namespaced: true,
    state,
    mutations,
    actions,
    getters,
};