package router

import (
	"net/http"

	"metazone.cc/metalab/internal/common"
	"metazone.cc/metalab/internal/config"
	"metazone.cc/metalab/internal/middleware"

	"github.com/gin-gonic/gin"
)

// setupFrontendRoutes 注册前端页面路由
func setupFrontendRoutes(r *gin.Engine, cfg *config.Config, d *dependencies) {
	// --- 页面路由（CSRF 仅下发 token，不验证） ---
	pages := r.Group("/")
	pages.Use(d.authMdw.Optional())
	pages.Use(middleware.CSRF(cfg))
	pages.Use(func(c *gin.Context) {
		middleware.SetCSRFToken(c, cfg)
		c.Next()
	})
	{
		pages.GET("/", func(c *gin.Context) {
			c.HTML(http.StatusOK, "home/index.html", common.BuildPageData(c, gin.H{
				"Title":    "首页",
				"ExtraCSS": "/static/css/home.css",
			}))
		})

		pages.GET("/settings", func(c *gin.Context) {
			c.Redirect(http.StatusFound, "/settings/profile")
		})
		pages.GET("/settings/:tab", d.settingsCtrl.SettingsPage)
		pages.GET("/messages", d.messageCtrl.MessagesPage)

		// 用户空间（静态 /space 必须在 :uid 之前注册）
		pages.GET("/space", d.spaceCtrl.MySpace)
		pages.GET("/space/:uid", d.spaceCtrl.ShowSpace)

		// 帖子页面
		pages.GET("/posts", d.postCtrl.ListPage)
		pages.GET("/posts/new", d.authMdw.Required(), func(c *gin.Context) {
			c.Redirect(http.StatusMovedPermanently, "/studio/write")
		})
		pages.GET("/posts/:id", d.postCtrl.ShowPage)
		pages.GET("/posts/:id/edit", d.authMdw.Required(), d.postCtrl.EditPage)

		// 创作中心（需登录）
		studioPages := pages.Group("/studio")
		studioPages.Use(d.authMdw.Required())
		{
			studioPages.GET("", d.studioCtrl.OverviewPage)
			studioPages.GET("/posts", d.studioCtrl.PostsPage)
			studioPages.GET("/drafts", d.studioCtrl.DraftsPage)
			studioPages.GET("/write", d.studioCtrl.WritePage)
			studioPages.GET("/analytics", d.studioCtrl.AnalyticsPage)
		}
	}

	// 认证页面（已登录自动跳走）
	authPages := r.Group("/auth")
	authPages.Use(d.authMdw.Optional())
	authPages.Use(middleware.CSRF(cfg))
	authPages.Use(func(c *gin.Context) {
		middleware.SetCSRFToken(c, cfg)
		c.Next()
	})
	{
		authPages.GET("/register", d.authCtrl.RegisterPage)
		authPages.GET("/login", d.authCtrl.LoginPage)
	}
}
