package controllers

import (
	"github.com/gofiber/fiber/v2"
	"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
)

// ─── Configuración de canales de notificación ─────────────────────────────────

func NotifConfigIndex(c *fiber.Ctx) error {
	return c.Render("notif_config", fiber.Map{
		"user":    c.Locals("user"),
		"modules": c.Locals("userModules"),
	}, "layouts/main")
}

func GetNotifConfigs(c *fiber.Ctx) error {
	items, err := models.GetAllNotifConfigs()
	if err != nil {
		return c.Status(500).JSON(fiber.Map{"error": err.Error()})
	}
	return c.JSON(items)
}

func SaveNotifConfig(c *fiber.Ctx) error {
	var cfg models.NotifEventoConfig
	if err := c.BodyParser(&cfg); err != nil {
		return c.Status(400).JSON(fiber.Map{"error": err.Error()})
	}
	if cfg.Evento == "" || cfg.Destinatario == "" {
		return c.Status(400).JSON(fiber.Map{"error": "evento y destinatario son requeridos"})
	}
	if err := models.UpsertNotifConfig(&cfg); err != nil {
		return c.Status(500).JSON(fiber.Map{"error": err.Error()})
	}
	return c.JSON(fiber.Map{"ok": true})
}

// ─── Notificaciones in-app (sistema) ─────────────────────────────────────────

// GetMisNotifs devuelve notificaciones del admin autenticado (tipo_usuario=admin, usuario_id=0).
func GetMisNotifs(c *fiber.Ctx) error {
	soloNoLeidas := c.Query("no_leidas") == "1"
	items, err := models.GetSistemaNotifs("admin", 0, soloNoLeidas)
	if err != nil {
		return c.Status(500).JSON(fiber.Map{"error": err.Error()})
	}
	count := models.CountUnreadNotifs("admin", 0)
	return c.JSON(fiber.Map{"items": items, "unread": count})
}

func MarcarNotifLeida(c *fiber.Ctx) error {
	id, _ := c.ParamsInt("id")
	if err := models.MarcarNotifLeida(uint(id)); err != nil {
		return c.Status(500).JSON(fiber.Map{"error": err.Error()})
	}
	return c.JSON(fiber.Map{"ok": true})
}

func MarcarTodasLeidas(c *fiber.Ctx) error {
	if err := models.MarcarTodasLeidas("admin", 0); err != nil {
		return c.Status(500).JSON(fiber.Map{"error": err.Error()})
	}
	return c.JSON(fiber.Map{"ok": true})
}
