<template>
    <div class="block ml-3 mr-3 is-max-widescreen is-max-desktop">
        <comunes-tabs-secciones :tabs="tabs" :tabInicial="tabActiva"></comunes-tabs-secciones>
        <div class="block pb-6" id="pedidos-compras-seccion"
             :class="seccionActiva === 'pedidos-compras-seccion' ? 'is-active' : 'is-hidden'">
            <div class="block" id="pedidos-compras-tabla-y-dropdown">
                <dropdown-descargar>
                </dropdown-descargar>
            </div>
        </div>
        <div class="block pb-6" id="canasta-compras-seccion"
             :class="seccionActiva === 'canasta-compras-seccion' ? 'is-active' : 'is-hidden'">
            <div class="block" id="canasta-compras-seccion">
                <article class="message is-warning">
                    <div class="message-header">
                        <p>Formato de la canasta</p>
                    </div>
                    <div class="message-body">
                        <div class="content">
                            La planilla de la canasta tiene que tener el siguiente formato para que la aplicación la lea correctamente:
                            <ul>
                                <li> Los precios deben usar punto y no coma decimal </li>
                                <li> El nombre de las columnas deben ser "Tipo", "Producto", y "Precio" respectivamente </li>
                                <li> Las celdas deben separarse con '|' </li>
                                <li> No puede haber "enters" en ninguna celda </li>
                                <li> El bono de transporte debe tener tipo 'T' </li>
                            </ul>
                            <a class="has-text-info" href="/compras/canasta/ejemplo">Planilla de ejemplo.</a>
                            <article class="message is-danger mt-2">
                                <div class="message-body">
                                    <div class="content">
                                        Cuidado! Cargar una nueva canasta elimina todos los pedidos de la aplicación.
                                    </div>
                                </div>
                            </article>
                        </div>
                    </div>
                </article>
                <div class="buttons is-right">
                    <canasta-input></canasta-input>
                </div>
            </div>
        </div>
        <div
            class="block pb-6"
            id="saldos-compras-seccion"
            :class="seccionActiva === 'saldos-compras-seccion' ? 'is-active' : 'is-hidden'"
        >
            <div class="block" id="saldos-compras-seccion">
                <article class="message is-warning">
                    <div class="message-header">
                        <p>
                            <button class="icon" aria-label="foldout" @click="toggleSaldosFileDialog">
                                <i class="fa" :class="show_saldos_file_dialog ? 'fa-arrow-up' : 'fa-arrow-down'"></i>
                            </button>
                            Cargar saldos
                        </p>
                    </div>
                    <div class="message-body" v-if="show_saldos_file_dialog">
                        <div class="content">
                            La planilla de saldos tiene que tener el siguiente formato para que la aplicación la lea correctamente:
                            <ul>
                                <li>Los valores deben usar punto y no coma decimal</li>
                                <li>El nombre de las columnas deben ser "Barrio" y "Saldo"</li>
                                <li>Las celdas deben separarse con '|'</li>
                                <li>No puede haber "enters" en ninguna celda</li>
                                <li>El nombre de los barrios debe estar exactamente igual que como est&aacute;n configurados en esta aplicacai&oacute;n</li>
                            </ul>
                            <article class="message is-danger mt-2">
                                <div class="message-body">
                                    <div class="content">
                                        Cargar un archivo de saldos s&oacute;lo reemplazar&aacute; los saldos de los barrios presentes en la tabla.
                                    </div>
                                </div>
                            </article>
                        </div>
                        <input-file-button text="Subir archivo" @archivo-subido="saldosSubido" />
                    </div>
                </article>

                <table class="table container">
                    <thead>
                        <tr>
                            <th>Barrio</th>
                            <th>Saldo</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr v-for="gdc in grupos_de_compra">
                            <th>{{ gdc.nombre }}</th>
                            <td>
                                <input id="cantidad"
                                       v-model="gdc.saldo"
                                       class="input is-small"
                                       type="number"
                                       style="text-align: center"
                                       @input="saldoModificado(gdc.id)">
                            </td>
                            <td>
                                <button :disabled="!isSaldoModificado(gdc.id)" class="button is-small is-success ml-1" @click="confirmar_saldo(gdc.id)">
                                    <span class="icon">
                                        <i class="fas fa-check"></i>
                                    </span>
                                </button>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</template>

<script>
import TabsSecciones from "../comunes/TabsSecciones.vue";
import DropdownDescargar from "./DropdownDescargar.vue";
import CanastaInput from "./CanastaInput.vue";
import InputFileButton from "../comunes/InputFileButton.vue";
import { mapActions, mapState } from "vuex";

export default {
    components: {
        TabsSecciones,
        DropdownDescargar,
        CanastaInput,
        InputFileButton,
    },
    data() {
        return {
            tabs: [
                { id: "pedidos-compras", nombre: "Pedidos" },
                { id: "canasta-compras", nombre: "Canasta" },
                { id: "saldos-compras", nombre: "Saldos" },
            ],
            tabActiva: "pedidos-compras",
            seccionActiva: "pedidos-compras-seccion",
            archivo: undefined,
            saldo_modificado: {},
            show_saldos_file_dialog: false,
        }
    },
    methods: {
        setSeccionActiva(tabId) {
            this.tabActiva = tabId;
            this.seccionActiva = tabId + "-seccion";
        },
        ...mapActions('comisiones', ['getGruposDeCompra', 'setSaldo']),
        ...mapActions('ui',["toast"]),
        async confirmar_saldo(gdc_id) {
            var saldo = this.getSaldo(gdc_id);
            await this.setSaldo({
                gdc_id: gdc_id,
                saldo: saldo,
            });
            this.saldo_modificado[gdc_id] = false;
            await this.getGruposDeCompra();
        },
        saldoModificado(gdc_id) {
            this.saldo_modificado[gdc_id] = true;
        },
        isSaldoModificado(gdc_id) {
            return gdc_id in this.saldo_modificado && this.saldo_modificado[gdc_id];
        },
        getSaldo(gdc_id) {
            for (var i = 0; i < this.grupos_de_compra.length; i++) {
                if (this.grupos_de_compra[i].id == gdc_id) {
                    return this.grupos_de_compra[i].saldo;
                }
            }
            return 0;
        },
        async saldosSubido(event) {
            var archivo = event.archivo;
            if (archivo.type === "text/csv") {
                const formData = new FormData();
                formData.append("data", archivo);
                try {
                    const response = await axios.post("/compras/saldos", formData, {
                        headers: {
                            "Content-Type": "multipart/form-data",
                        },
                    });
                    this.getGruposDeCompra();
                    this.toast({ mensaje: (response.data.message || "Canasta cargada exitosamente") });
                } catch (error) {
                    console.log(error);
                    this.toast({ mensaje: (error.response?.data?.message || "Hubo errores.") });
                }
                event.component.cargando = false;
            } else {
                this.toast("El archivo debe ser .CSV");
                event.component.cargando = false;
            }
        },
        toggleSaldosFileDialog() {
            this.show_saldos_file_dialog = !this.show_saldos_file_dialog;
        },
    },
    computed: {
        ...mapState('comisiones', [
            'grupos_de_compra',
        ]),
    },
    async mounted() {
        await this.getGruposDeCompra();
    },
}
</script>