import { Request, Response } from "express";
import { FilterModel } from "../models/filterModel";
import { Filter } from "../types/filter";

export const filterController = {
  getAll: async (req: Request, res: Response): Promise<void> => {
    try {
      const filters = await FilterModel.findAll(Number((req.session as any).userId));
      res.json({ success: true, data: filters });
    } catch (err) {
      res.status(500).json({ success: false, error: "Error" });
    }
  },

  getById: async (req: Request, res: Response): Promise<void> => {
    try {
      const filter = await FilterModel.findById(parseInt(req.params.id), Number((req.session as any).userId));
      if (!filter) { res.status(404).json({ success: false, error: "No encontrado" }); return; }
      res.json({ success: true, data: filter });
    } catch (err) {
      res.status(500).json({ success: false, error: "Error" });
    }
  },

  create: async (req: Request, res: Response): Promise<void> => {
    try {
      const filter: Filter = { ...req.body, email_alerts: req.body.email_alerts === "1" || req.body.email_alerts === true };
      const created = await FilterModel.create(filter, Number((req.session as any).userId));
      res.json({ success: true, data: created });
    } catch (err) {
      res.status(500).json({ success: false, error: "Error al crear filtro" });
    }
  },

  update: async (req: Request, res: Response): Promise<void> => {
    try {
      await FilterModel.update(parseInt(req.params.id), Number((req.session as any).userId), req.body);
      res.json({ success: true });
    } catch (err) {
      res.status(500).json({ success: false, error: "Error al actualizar" });
    }
  },

  delete: async (req: Request, res: Response): Promise<void> => {
    try {
      await FilterModel.deleteById(parseInt(req.params.id), Number((req.session as any).userId));
      res.json({ success: true });
    } catch (err) {
      res.status(500).json({ success: false, error: "Error al eliminar" });
    }
  },
};

export default filterController;
