const BaseController = require('./base.controller');
const { Auditoria } = require('../models');

class AuditoriaController extends BaseController {
  constructor() {
    super(Auditoria, 'Auditoria', ['Accion', 'Tabla', 'Resumen']);
  }

  // Obtener por usuario
  getByUsuario = async (req, res, next) => {
    try {
      const { usuarioId } = req.params;

      const data = await Auditoria.findAndCountAll({
        where: { UsuarioId: usuarioId },
        order: [['Interaccion', 'DESC']]
      });
      const count = data.length;
      if (count === 0) {
        return res.json(
          {
            success: false,
            message: 'No se encontraron auditorías para este usuario',
            data: [],
            total: 0
          }
        );
      }
      res.json({
        success: true,
        message: 'Auditorías obtenidas exitosamente',
        data: data,
        total: count
      });
    } catch (error) {
      next(error);
    }
  };

  // Obtener por tabla
  getByTabla = async (req, res, next) => {
    try {
      const { tabla } = req.params;

      const data = await Auditoria.findAndCountAll({
        where: { Tabla: tabla },
        order: [['Interaccion', 'DESC']]
      });
      const count = data.length;
      if (count === 0) {
        return res.json(
          {
            success: false,
            message: 'No se encontraron auditorías para esta tabla',
            data: [],
            total: 0
          }
        );
      }
      res.json({
        success: true,
        message: 'Auditorías obtenidas exitosamente',
        data: data,
        total: count
      });
    } catch (error) {
      next(error);
    }
  };

  // Obtener por acción
  getByAccion = async (req, res, next) => {
    try {
      const { accion } = req.params;

      const data = await Auditoria.findAndCountAll({
        where: { Accion: accion },
        order: [['Interaccion', 'DESC']]
      });
      const count = data.length;
      if (count === 0) {
        return res.json(
          {
            success: false,
            message: 'No se encontraron auditorías para esta acción',
            data: [],
            total: 0
          }
        );
      }
      res.json({
        success: true,
        message: 'Auditorías obtenidas exitosamente',
        ...response
      });
    } catch (error) {
      next(error);
    }
  };
}

module.exports = new AuditoriaController();