package com.aiotagro.cattletrade.business.controller;

import cn.dev33.satoken.annotation.SaCheckPermission;
import com.aiotagro.cattletrade.business.entity.SalesOverview;
import com.aiotagro.cattletrade.business.service.ISalesOverviewService;
import com.aiotagro.common.core.web.domain.AjaxResult;
import com.aiotagro.common.core.web.domain.PageResultResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Map;

/**
 * 销售概览控制器
 *
 * @author System
 * @date 2025-01-20
 */
@RestController
@RequestMapping("/salesoverview")
public class SalesOverviewController {

    private static final Logger logger = LoggerFactory.getLogger(SalesOverviewController.class);

    @Autowired
    private ISalesOverviewService salesOverviewService;

    /**
     * 查询销售概览列表（分页+搜索）
     */
    @SaCheckPermission("salesoverview:list")
    @PostMapping("/list")
    public PageResultResponse<SalesOverview> list(@RequestBody Map<String, Object> params) {
        try {
            logger.info("查询销售概览列表，参数：{}", params);
            PageResultResponse<SalesOverview> result = salesOverviewService.pageQuery(params);
            logger.info("查询成功，共{}条记录", result.getData().getTotal());
            return result;
        } catch (Exception e) {
            logger.error("查询销售概览列表失败：{}", e.getMessage(), e);
            return new PageResultResponse<>(0, new ArrayList<>());
        }
    }

    /**
     * 新增销售概览
     */
    @SaCheckPermission("salesoverview:add")
    @PostMapping("/add")
    public AjaxResult add(@RequestBody SalesOverview salesOverview) {
        try {
            logger.info("新增销售概览");
            return salesOverviewService.addSalesOverview(salesOverview);
        } catch (Exception e) {
            logger.error("新增销售概览失败：{}", e.getMessage(), e);
            return AjaxResult.error("新增销售概览失败：" + e.getMessage());
        }
    }

    /**
     * 编辑销售概览
     */
    @SaCheckPermission("salesoverview:edit")
    @PostMapping("/edit")
    public AjaxResult edit(@RequestBody SalesOverview salesOverview) {
        try {
            logger.info("编辑销售概览，ID：{}", salesOverview.getId());

            if (salesOverview.getId() == null) {
                logger.error("编辑失败：销售概览ID不能为空");
                return AjaxResult.error("销售概览ID不能为空");
            }

            return salesOverviewService.updateSalesOverview(salesOverview);
        } catch (Exception e) {
            logger.error("编辑销售概览失败：{}", e.getMessage(), e);
            return AjaxResult.error("编辑销售概览失败：" + e.getMessage());
        }
    }

    /**
     * 删除销售概览
     */
    @SaCheckPermission("salesoverview:delete")
    @GetMapping("/delete")
    public AjaxResult delete(@RequestParam Integer id) {
        try {
            logger.info("删除销售概览，ID：{}", id);

            if (id == null) {
                logger.error("删除失败：销售概览ID不能为空");
                return AjaxResult.error("销售概览ID不能为空");
            }

            return salesOverviewService.deleteSalesOverview(id);
        } catch (Exception e) {
            logger.error("删除销售概览失败：{}", e.getMessage(), e);
            return AjaxResult.error("删除销售概览失败：" + e.getMessage());
        }
    }

    /**
     * 查询销售概览详情
     */
    @SaCheckPermission("salesoverview:view")
    @GetMapping("/detail")
    public AjaxResult detail(@RequestParam Integer id) {
        try {
            logger.info("查询销售概览详情，ID：{}", id);

            if (id == null) {
                logger.error("查询失败：销售概览ID不能为空");
                return AjaxResult.error("销售概览ID不能为空");
            }

            return salesOverviewService.getSalesOverviewDetail(id);
        } catch (Exception e) {
            logger.error("查询销售概览详情失败：{}", e.getMessage(), e);
            return AjaxResult.error("查询销售概览详情失败：" + e.getMessage());
        }
    }

    /**
     * 手动触发计算统计数据
     */
    @SaCheckPermission("salesoverview:calculate")
    @PostMapping("/calculate")
    public AjaxResult calculate() {
        try {
            logger.info("手动触发计算销售概览统计数据");
            return salesOverviewService.calculateStatistics();
        } catch (Exception e) {
            logger.error("计算销售概览统计数据失败：{}", e.getMessage(), e);
            return AjaxResult.error("计算失败：" + e.getMessage());
        }
    }
}

