package handlers

import (
	"strconv"

	"github.com/gin-gonic/gin"
	"github.com/niangaodev/art-code/models"
	"github.com/niangaodev/art-code/repositories"
	"github.com/niangaodev/art-code/utils"
)

// GetAboutProfile 获取公开的关于页面信息（主页资料）
func GetAboutProfile(c *gin.Context) {
	profile, err := repositories.GetPrimaryAboutProfile()
	if err != nil {
		utils.ServerError(c, err)
		return
	}
	if profile == nil {
		utils.Error(c, 404, "About profile not found")
		return
	}

	utils.Success(c, profile)
}

// AdminGetAboutProfiles 管理员获取所有资料列表
func AdminGetAboutProfiles(c *gin.Context) {
	profiles, err := repositories.GetAllAboutProfiles()
	if err != nil {
		utils.ServerError(c, err)
		return
	}
	if profiles == nil {
		utils.Success(c, []interface{}{})
	} else {
		utils.Success(c, profiles)
	}
}

// AdminCreateAboutProfile 创建资料
func AdminCreateAboutProfile(c *gin.Context) {
	var profile models.AboutProfile
	if err := c.ShouldBindJSON(&profile); err != nil {
		utils.Error(c, 400, "Invalid request")
		return
	}

	if err := repositories.CreateAboutProfile(&profile); err != nil {
		utils.ServerError(c, err)
		return
	}

	// 重新读取数据以确保返回完整的数据（包括从数据库解析的 TechList 和 ExperienceList）
	createdProfile, err := repositories.GetAboutProfileByID(profile.ID)
	if err != nil {
		utils.ServerError(c, err)
		return
	}
	if createdProfile == nil {
		utils.Error(c, 404, "Profile not found after creation")
		return
	}

	utils.Success(c, createdProfile)
}

// AdminUpdateAboutProfile 更新资料
func AdminUpdateAboutProfile(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseUint(idStr, 10, 32)
	if err != nil {
		utils.Error(c, 400, "Invalid ID")
		return
	}

	var profile models.AboutProfile
	if err := c.ShouldBindJSON(&profile); err != nil {
		utils.Error(c, 400, "Invalid request")
		return
	}
	profile.ID = uint(id)

	if err := repositories.UpdateAboutProfile(&profile); err != nil {
		utils.ServerError(c, err)
		return
	}

	// 重新读取数据以确保返回完整的数据（包括从数据库解析的 TechList 和 ExperienceList）
	updatedProfile, err := repositories.GetAboutProfileByID(profile.ID)
	if err != nil {
		utils.ServerError(c, err)
		return
	}
	if updatedProfile == nil {
		utils.Error(c, 404, "Profile not found after update")
		return
	}

	utils.Success(c, updatedProfile)
}

// AdminDeleteAboutProfile 删除资料
func AdminDeleteAboutProfile(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseUint(idStr, 10, 32)
	if err != nil {
		utils.Error(c, 400, "Invalid ID")
		return
	}

	if err := repositories.DeleteAboutProfile(uint(id)); err != nil {
		utils.ServerError(c, err)
		return
	}

	utils.SuccessWithMsg(c, "Profile deleted successfully", nil)
}
