package controller

import (
	"net/http"
	"strconv"

	"github.com/gin-gonic/gin"
	"github.com/lvhao0419/fetch_flash/service"
)

type ActivityQueryParams struct {
	StartDate string  `form:"startDate" json:"startDate"`
	EndDate   string  `form:"endDate" json:"endDate"`
	StartTime string  `form:"startTime" json:"startTime"`
	EndTime   string  `form:"endTime" json:"endTime"`
	Latitude  float64 `form:"latitude" json:"latitude"`
	Longitude float64 `form:"longitude" json:"longitude"`
	Distance  float64 `form:"distance" json:"distance"`
}

func QueryActivity(c *gin.Context) {
	var params ActivityQueryParams
	if err := c.ShouldBind(&params); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": "参数解析失败"})
		return
	}

	serviceParams := service.ActivityQueryParams{
		StartDate: params.StartDate,
		EndDate:   params.EndDate,
		StartTime: params.StartTime,
		EndTime:   params.EndTime,
		Latitude:  params.Latitude,
		Longitude: params.Longitude,
		Distance:  params.Distance,
	}

	results, err := service.QueryActivities(c.Request.Context(), serviceParams)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": "查询失败"})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"code":    200,
		"message": "查询成功",
		"data":    results,
	})
}

type ActivityDetailParams struct {
	ActivityID int32 `form:"activityId" json:"activityId" binding:"required"`
}

func QueryActivityDetail(c *gin.Context) {
	var params ActivityDetailParams

	// 尝试从请求体绑定
	if err := c.ShouldBind(&params); err != nil {
		// 如果请求体绑定失败，尝试从URL参数获取
		if activityIDStr := c.Query("activityId"); activityIDStr != "" {
			if activityID, err := strconv.ParseInt(activityIDStr, 10, 32); err == nil {
				params.ActivityID = int32(activityID)
			} else {
				c.JSON(http.StatusBadRequest, gin.H{"error": "参数解析失败"})
				return
			}
		} else {
			c.JSON(http.StatusBadRequest, gin.H{"error": "参数解析失败"})
			return
		}
	}

	result, err := service.GetActivityDetail(c.Request.Context(), params.ActivityID)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": "查询失败"})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"code":    200,
		"message": "查询成功",
		"data":    result,
	})
}
