package routes

import (
	"github.com/gofiber/fiber/v2"
	"github.com/sujit-baniya/fiber-boilerplate/rest/controllers"
	"github.com/sujit-baniya/fiber-boilerplate/rest/middlewares"
)

func PortalRoutes(app fiber.Router) {
	// ─── Rutas públicas ────────────────────────────────────────────────────────
	app.Get("/portal/login", controllers.PortalLoginPage)
	app.Post("/portal/login", controllers.PortalLoginPost)
	app.Get("/portal/logout", controllers.PortalLogout)
	app.Get("/portal/forgot-password", controllers.PortalForgotPasswordPage)
	app.Post("/portal/forgot-password", controllers.PortalForgotPasswordPost)
	app.Get("/portal/reset-password", controllers.PortalResetPasswordPage)
	app.Post("/portal/reset-password", controllers.PortalResetPasswordPost)

	// ─── Rutas protegidas ──────────────────────────────────────────────────────
	portal := app.Group("/portal").Use(middlewares.PortalAuth())

	portal.Get("/dashboard", controllers.PortalDashboard)
	portal.Get("/proyecto/:slug", controllers.PortalProyecto)

	// API JSON para Alpine.js
	portal.Get("/api/proyectos", controllers.PortalGetProyectos)
	portal.Get("/api/proyecto/:slug", controllers.PortalGetProyectoData)

	// Tickets
	portal.Post("/tickets", controllers.PortalCrearTicket)
	portal.Post("/tickets/:id/mensaje", controllers.PortalResponderTicket)
	portal.Post("/tickets/:id/leido", controllers.PortalMarcarTicketLeido)

	// Descargas
	portal.Get("/entregables/:id/download", controllers.PortalDownloadEntregable)
	portal.Get("/facturas/:id/download", controllers.PortalDownloadFactura)
	portal.Get("/documentos/:id/download", controllers.PortalDownloadDocumento)

	// Notificaciones in-app del portal user
	portal.Get("/mis-notifs", controllers.PortalGetMisNotifs)
	portal.Put("/mis-notifs/:id/leida", controllers.PortalMarcarNotifLeida)
	portal.Post("/mis-notifs/marcar-todas", controllers.PortalMarcarTodasLeidas)
	portal.Post("/mis-notifs/marcar-facturas", controllers.PortalMarcarFacturasLeidas)

	// Partner: recursos y comunicados (solo usuarios con rol partner)
	portal.Get("/partner-recursos", middlewares.PortalPartnerOnly(), controllers.PortalPartnerRecursos)
	portal.Get("/partner-recursos/:id/download", middlewares.PortalPartnerOnly(), controllers.PortalDownloadPartnerRecurso)
	portal.Get("/partner-comunicados/:id/download", middlewares.PortalPartnerOnly(), controllers.DownloadPartnerComunicadoArchivo)

	// Mi perfil
	portal.Get("/mi-perfil", controllers.PortalGetMiPerfil)
	portal.Put("/mi-perfil", controllers.PortalUpdateMiPerfil)
	portal.Put("/mi-perfil/password", controllers.PortalCambiarPassword)
	portal.Post("/mi-perfil/rut-file", controllers.PortalSubirRutDocumento)

	// Telegram: vinculación guiada
	portal.Post("/mi-perfil/telegram-init", controllers.PortalTelegramInit)
	portal.Get("/mi-perfil/telegram-status", controllers.PortalTelegramStatus)
	portal.Post("/mi-perfil/telegram-validar", controllers.PortalTelegramValidar)
}
