package com.ruoyi.web.modules.industryservice.controller;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.web.modules.industryservice.domain.BizYakAsset;
import com.ruoyi.web.modules.industryservice.service.IBizYakAssetService;

/**
 * 牦牛资产档案 HTTP 接口。
 * <p>
 * Base Path：{@code /dataModel/yakAsset}；权限前缀 {@code dataModel:yakAsset:}。
 * 本期仅提供查询与第三方同步，不提供档案增删改维护接口。
 * </p>
 *
 * @see IBizYakAssetService
 */
@RestController
@RequestMapping("/dataModel/yakAsset")
public class BizYakAssetController extends BaseController
{
    @Autowired
    private IBizYakAssetService bizYakAssetService;

    /**
     * 分页列表。支持牦牛编号模糊、资产状态精确筛选。
     *
     * @param query keyword（yak_no 模糊）、assetStatus（1～4）
     */
    @PreAuthorize("@ss.hasPermi('dataModel:yakAsset:list')")
    @GetMapping("/list")
    public TableDataInfo list(BizYakAsset query)
    {
        startPage();
        List<BizYakAsset> list = bizYakAssetService.selectBizYakAssetList(query);
        return getDataTable(list);
    }

    /**
     * 按牦牛编号查详情，供系谱区父/母编号跳转使用。
     */
    @PreAuthorize("@ss.hasPermi('dataModel:yakAsset:query')")
    @GetMapping("/byNo/{yakNo}")
    public AjaxResult getByYakNo(@PathVariable("yakNo") String yakNo)
    {
        return success(bizYakAssetService.selectDetailByYakNo(yakNo));
    }

    /**
     * 个体生理近 N 天曲线。默认 30 天，数据实时来自 IoT 耳标与环境监测开放接口。
     *
     * @param days 查询天数，1～366，默认 30
     */
    @PreAuthorize("@ss.hasPermi('dataModel:yakAsset:query')")
    @GetMapping("/{id}/physioChart")
    public AjaxResult physioChart(@PathVariable("id") Long id, @RequestParam(value = "days", required = false) Integer days)
    {
        return success(bizYakAssetService.selectPhysioChart(id, days));
    }

    /**
     * 生长曲线。按 metric 取体重/体高/胸围/体长；体重来自称重 OpenAPI 近一年数据。
     *
     * @param metric weight（默认）/ height / chest / length
     */
    @PreAuthorize("@ss.hasPermi('dataModel:yakAsset:query')")
    @GetMapping("/{id}/growthChart")
    public AjaxResult growthChart(@PathVariable("id") Long id,
            @RequestParam(value = "metric", required = false) String metric)
    {
        return success(bizYakAssetService.selectGrowthChart(id, metric));
    }

    /**
     * 档案详情：主表 + 生长/繁殖/饲喂子表；个体生理实时值在 Service 层填充。
     */
    @PreAuthorize("@ss.hasPermi('dataModel:yakAsset:query')")
    @GetMapping("/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
        return success(bizYakAssetService.selectDetailById(id));
    }

    /**
     * 触发牧业金融生物资产全量同步：养殖场 → 圈舍 → 生产计划 → 批次 → 入栏建档。
     */
    @PreAuthorize("@ss.hasPermi('dataModel:yakAsset:sync')")
    @Log(title = "牦牛资产档案", businessType = BusinessType.OTHER)
    @PostMapping("/sync")
    public AjaxResult sync()
    {
        return success(bizYakAssetService.syncFromThirdParty());
    }
}
