const Documento = require("../models/documento");
const toUpper = (val) => (typeof val === 'string' && val) ? val.toUpperCase().trim() : val;

async function obtenerDocumentos(req, res) {
    try {
        const { categoria } = req.query;
        
        let condicion = {};
        if (categoria) {
            condicion.CATEGORIA = categoria;
        }

        let documentosObtenidos = await Documento.findAll({
            where: condicion,
            order: [['FECHA_REGISTRO', 'DESC']]
        });

        if (documentosObtenidos.length > 0) {
            res.status(200).send({
                data: documentosObtenidos,
                message: "Documentos cargados correctamente"
            });
        } else {
            res.status(200).send({
                data: [],
                message: 'No existen documentos registrados'
            });
        }
    } catch (err) {
        res.status(500).send({
            message: 'Error: ' + err
        });
    }
}

// Crear documento con archivo
async function crearDocumento(req, res) {
    try {
        if (!req.file) {
            return res.status(400).send({
                message: 'No se proporcionó ningún archivo'
            });
        }

        const { nombre, categoria } = req.body;

        if (!nombre || !categoria) {
            return res.status(400).send({
                message: 'Nombre y categoría son requeridos'
            });
        }

        const nuevoDocumento = await Documento.create({
            NOMBRE: toUpper(nombre),
            CATEGORIA: toUpper(categoria),
            PATH: `uploads/documentos/${req.file.filename}`
        });

        res.status(201).send({
            data: nuevoDocumento,
            message: 'Documento creado exitosamente'
        });

    } catch (err) {
        res.status(500).send({
            message: 'Error: ' + err
        });
    }
}
// Eliminar documento
async function eliminarDocumento(req, res) {
    try {
        const { id } = req.params;
        const documento = await Documento.findByPk(id);
        
        if (!documento) {
            return res.status(404).send({
                message: 'Documento no encontrado'
            });
        }

        // Eliminar archivo físico
        const fs = require('fs');
        const path = require('path');
        const archivoPath = path.join(__dirname, '..', documento.PATH);
        
        if (fs.existsSync(archivoPath)) {
            fs.unlinkSync(archivoPath);
        }

        await documento.destroy();
        
        res.send({
            success: true,
            message: 'Documento eliminado exitosamente'
        });
    } catch (err) {
        res.status(500).send({
            message: 'Error: ' + err
        });
    }
}

module.exports = {
    obtenerDocumentos,
    crearDocumento,
    eliminarDocumento
};