package com.xy.xyaicpzs.controller;

import com.xy.xyaicpzs.common.ErrorCode;
import com.xy.xyaicpzs.common.ResultUtils;
import com.xy.xyaicpzs.common.response.ApiResponse;
import com.xy.xyaicpzs.domain.entity.DltFrontendHistoryAll;
import com.xy.xyaicpzs.domain.entity.DltFrontendHistory100;
import com.xy.xyaicpzs.domain.entity.DltFrontendHistoryTop;
import com.xy.xyaicpzs.domain.entity.DltFrontendHistoryTop100;
import com.xy.xyaicpzs.domain.entity.DltBackendHistoryAll;
import com.xy.xyaicpzs.domain.entity.DltBackendHistory100;
import com.xy.xyaicpzs.domain.entity.DltBackendHistoryTop;
import com.xy.xyaicpzs.domain.entity.DltBackendHistoryTop100;
import com.xy.xyaicpzs.service.DltFrontendHistoryAllService;
import com.xy.xyaicpzs.service.DltFrontendHistory100Service;
import com.xy.xyaicpzs.service.DltFrontendHistoryTopService;
import com.xy.xyaicpzs.service.DltFrontendHistoryTop100Service;
import com.xy.xyaicpzs.service.DltBackendHistoryAllService;
import com.xy.xyaicpzs.service.DltBackendHistory100Service;
import com.xy.xyaicpzs.service.DltBackendHistoryTopService;
import com.xy.xyaicpzs.service.DltBackendHistoryTop100Service;
import com.xy.xyaicpzs.util.UserAuthValidator;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 大乐透球号活跃分析控制器
 * 提供大乐透前区和后区历史数据查询API接口
 */
@Slf4j
@RestController
@RequestMapping("/dlt/ball-active-analysis")
@Tag(name = "大乐透球号活跃分析", description = "大乐透前区和后区历史数据查询API")
public class DltBallActiveAnalysisController {

    @Autowired
    private DltFrontendHistoryAllService dltFrontendHistoryAllService;

    @Autowired
    private DltFrontendHistory100Service dltFrontendHistory100Service;

    @Autowired
    private DltFrontendHistoryTopService dltFrontendHistoryTopService;

    @Autowired
    private DltFrontendHistoryTop100Service dltFrontendHistoryTop100Service;

    @Autowired
    private DltBackendHistoryAllService dltBackendHistoryAllService;

    @Autowired
    private DltBackendHistory100Service dltBackendHistory100Service;

    @Autowired
    private DltBackendHistoryTopService dltBackendHistoryTopService;

    @Autowired
    private DltBackendHistoryTop100Service dltBackendHistoryTop100Service;

    @Autowired
    private UserAuthValidator userAuthValidator;

    /**
     * 获取前区历史数据全部记录
     * @return 前区历史数据全部记录列表
     */
    @GetMapping("/frontend-history-all")
    @Operation(summary = "获取前区历史数据全部记录", description = "获取dlt_frontend_history_all表中的所有前区历史数据记录")
    public ApiResponse<List<DltFrontendHistoryAll>> getFrontendHistoryAll(HttpServletRequest request) {
        // 权限验证
        ApiResponse<List<DltFrontendHistoryAll>> authResult = userAuthValidator.validateUserAuth(request);
        if (authResult != null) {
            return authResult;
        }
        
        try {
            log.info("接收到获取前区历史数据全部记录请求");
            
            // 调用服务获取前区全部历史数据
            List<DltFrontendHistoryAll> result = dltFrontendHistoryAllService.list();
            
            log.info("获取前区历史数据全部记录完成，返回{}条记录", result.size());
            return ResultUtils.success(result);
            
        } catch (Exception e) {
            log.error("获取前区历史数据全部记录失败：{}", e.getMessage(), e);
            return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "获取前区历史数据全部记录失败：" + e.getMessage());
        }
    }

    /**
     * 获取前区最近100期数据记录
     * @return 前区最近100期数据记录列表
     */
    @GetMapping("/frontend-history-100")
    @Operation(summary = "获取前区最近100期数据记录", description = "获取dlt_frontend_history_100表中的所有前区最近100期数据记录")
    public ApiResponse<List<DltFrontendHistory100>> getFrontendHistory100(HttpServletRequest request) {
        // 权限验证
        ApiResponse<List<DltFrontendHistory100>> authResult = userAuthValidator.validateUserAuth(request);
        if (authResult != null) {
            return authResult;
        }
        
        try {
            log.info("接收到获取前区最近100期数据记录请求");
            
            // 调用服务获取前区最近100期数据
            List<DltFrontendHistory100> result = dltFrontendHistory100Service.list();
            
            log.info("获取前区最近100期数据记录完成，返回{}条记录", result.size());
            return ResultUtils.success(result);
            
        } catch (Exception e) {
            log.error("获取前区最近100期数据记录失败：{}", e.getMessage(), e);
            return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "获取前区最近100期数据记录失败：" + e.getMessage());
        }
    }

    /**
     * 获取前区历史数据排行记录
     * @return 前区历史数据排行记录列表
     */
    @GetMapping("/frontend-history-top")
    @Operation(summary = "获取前区历史数据排行记录", description = "获取dlt_frontend_history_top表中的所有前区历史数据排行记录")
    public ApiResponse<List<DltFrontendHistoryTop>> getFrontendHistoryTop(HttpServletRequest request) {
        // 权限验证
        ApiResponse<List<DltFrontendHistoryTop>> authResult = userAuthValidator.validateUserAuth(request);
        if (authResult != null) {
            return authResult;
        }
        
        try {
            log.info("接收到获取前区历史数据排行记录请求");
            
            // 调用服务获取前区历史数据排行
            List<DltFrontendHistoryTop> result = dltFrontendHistoryTopService.list();
            
            log.info("获取前区历史数据排行记录完成，返回{}条记录", result.size());
            return ResultUtils.success(result);
            
        } catch (Exception e) {
            log.error("获取前区历史数据排行记录失败：{}", e.getMessage(), e);
            return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "获取前区历史数据排行记录失败：" + e.getMessage());
        }
    }

    /**
     * 获取前区100期数据排行记录
     * @return 前区100期数据排行记录列表
     */
    @GetMapping("/frontend-history-top-100")
    @Operation(summary = "获取前区100期数据排行记录", description = "获取dlt_frontend_history_top_100表中的所有前区100期数据排行记录")
    public ApiResponse<List<DltFrontendHistoryTop100>> getFrontendHistoryTop100(HttpServletRequest request) {
        // 权限验证
        ApiResponse<List<DltFrontendHistoryTop100>> authResult = userAuthValidator.validateUserAuth(request);
        if (authResult != null) {
            return authResult;
        }
        
        try {
            log.info("接收到获取前区100期数据排行记录请求");
            
            // 调用服务获取前区100期数据排行
            List<DltFrontendHistoryTop100> result = dltFrontendHistoryTop100Service.list();
            
            log.info("获取前区100期数据排行记录完成，返回{}条记录", result.size());
            return ResultUtils.success(result);
            
        } catch (Exception e) {
            log.error("获取前区100期数据排行记录失败：{}", e.getMessage(), e);
            return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "获取前区100期数据排行记录失败：" + e.getMessage());
        }
    }

    /**
     * 获取后区历史数据全部记录
     * @return 后区历史数据全部记录列表
     */
    @GetMapping("/backend-history-all")
    @Operation(summary = "获取后区历史数据全部记录", description = "获取dlt_backend_history_all表中的所有后区历史数据记录")
    public ApiResponse<List<DltBackendHistoryAll>> getBackendHistoryAll(HttpServletRequest request) {
        // 权限验证
        ApiResponse<List<DltBackendHistoryAll>> authResult = userAuthValidator.validateUserAuth(request);
        if (authResult != null) {
            return authResult;
        }
        
        try {
            log.info("接收到获取后区历史数据全部记录请求");
            
            // 调用服务获取后区全部历史数据
            List<DltBackendHistoryAll> result = dltBackendHistoryAllService.list();
            
            log.info("获取后区历史数据全部记录完成，返回{}条记录", result.size());
            return ResultUtils.success(result);
            
        } catch (Exception e) {
            log.error("获取后区历史数据全部记录失败：{}", e.getMessage(), e);
            return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "获取后区历史数据全部记录失败：" + e.getMessage());
        }
    }

    /**
     * 获取后区最近100期数据记录
     * @return 后区最近100期数据记录列表
     */
    @GetMapping("/backend-history-100")
    @Operation(summary = "获取后区最近100期数据记录", description = "获取dlt_backend_history_100表中的所有后区最近100期数据记录")
    public ApiResponse<List<DltBackendHistory100>> getBackendHistory100(HttpServletRequest request) {
        // 权限验证
        ApiResponse<List<DltBackendHistory100>> authResult = userAuthValidator.validateUserAuth(request);
        if (authResult != null) {
            return authResult;
        }
        
        try {
            log.info("接收到获取后区最近100期数据记录请求");
            
            // 调用服务获取后区最近100期数据
            List<DltBackendHistory100> result = dltBackendHistory100Service.list();
            
            log.info("获取后区最近100期数据记录完成，返回{}条记录", result.size());
            return ResultUtils.success(result);
            
        } catch (Exception e) {
            log.error("获取后区最近100期数据记录失败：{}", e.getMessage(), e);
            return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "获取后区最近100期数据记录失败：" + e.getMessage());
        }
    }

    /**
     * 获取后区历史数据排行记录
     * @return 后区历史数据排行记录列表
     */
    @GetMapping("/backend-history-top")
    @Operation(summary = "获取后区历史数据排行记录", description = "获取dlt_backend_history_top表中的所有后区历史数据排行记录")
    public ApiResponse<List<DltBackendHistoryTop>> getBackendHistoryTop(HttpServletRequest request) {
        // 权限验证
        ApiResponse<List<DltBackendHistoryTop>> authResult = userAuthValidator.validateUserAuth(request);
        if (authResult != null) {
            return authResult;
        }
        
        try {
            log.info("接收到获取后区历史数据排行记录请求");
            
            // 调用服务获取后区历史数据排行
            List<DltBackendHistoryTop> result = dltBackendHistoryTopService.list();
            
            log.info("获取后区历史数据排行记录完成，返回{}条记录", result.size());
            return ResultUtils.success(result);
            
        } catch (Exception e) {
            log.error("获取后区历史数据排行记录失败：{}", e.getMessage(), e);
            return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "获取后区历史数据排行记录失败：" + e.getMessage());
        }
    }

    /**
     * 获取后区100期数据排行记录
     * @return 后区100期数据排行记录列表
     */
    @GetMapping("/backend-history-top-100")
    @Operation(summary = "获取后区100期数据排行记录", description = "获取dlt_backend_history_top_100表中的所有后区100期数据排行记录")
    public ApiResponse<List<DltBackendHistoryTop100>> getBackendHistoryTop100(HttpServletRequest request) {
        // 权限验证
        ApiResponse<List<DltBackendHistoryTop100>> authResult = userAuthValidator.validateUserAuth(request);
        if (authResult != null) {
            return authResult;
        }
        
        try {
            log.info("接收到获取后区100期数据排行记录请求");
            
            // 调用服务获取后区100期数据排行
            List<DltBackendHistoryTop100> result = dltBackendHistoryTop100Service.list();
            
            log.info("获取后区100期数据排行记录完成，返回{}条记录", result.size());
            return ResultUtils.success(result);
            
        } catch (Exception e) {
            log.error("获取后区100期数据排行记录失败：{}", e.getMessage(), e);
            return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "获取后区100期数据排行记录失败：" + e.getMessage());
        }
    }
}
