package org.jk.rag.controller;

import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.jk.common.core.domain.R;
import org.jk.common.excel.utils.ExcelUtil;
import org.jk.common.idempotent.annotation.RepeatSubmit;
import org.jk.common.log.annotation.Log;
import org.jk.common.log.enums.BusinessType;
import org.jk.common.mybatis.core.page.PageQuery;
import org.jk.common.mybatis.core.page.TableDataInfo;
import org.jk.common.web.core.BaseController;
import org.jk.rag.domain.Dataset;
import org.jk.rag.domain.entity.JkDocumentExportParams;
import org.jk.rag.domain.vo.DatasetDemoVo;
import org.jk.rag.domain.vo.DatasetVo;
import org.jk.rag.domain.vo.KnowledgeSliceVo;
import org.jk.rag.service.IJkDatasetService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 【数据集】Controller
 *
 * @author takai
 * @date 2025-05-28
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/deepseek/dataset")
public class JkDatasetController extends BaseController
{
    private final IJkDatasetService datasetService;

    /**
     * 查询数据集列表
     */


    @GetMapping("/pageList")
    public TableDataInfo<DatasetVo> pageList(String name,String createBy,PageQuery pageQuery)
    {
        Page<DatasetVo> list = datasetService.selectDatasetPageList(name,createBy,pageQuery);
        return TableDataInfo.build(list);
    }

    /**
     * 创建数据集
     */

    @SaCheckPermission("evaluationTool:datasetManagement:add")
    @PostMapping("/create")
    @RepeatSubmit
    public R<Map<String,String>> create(@RequestBody DatasetVo datasetVo)
    {
        Map<String,String> parm = new HashMap<>();
        boolean flg = datasetService.checkName(datasetVo.getName());
        if (!flg) {
            return R.fail("数据集名称已存在");
        }
        Long id = datasetService.insertDataset(datasetVo);
        parm.put("id",String.valueOf(id));
        parm.put("name", datasetVo.getName());
        return R.ok(parm);
    }

    @Log(title = "导出数据集模板", businessType = BusinessType.EXPORT)
    @PostMapping("/datsetExport")
    public void datsetExport(HttpServletResponse response)
    {
        List<DatasetDemoVo> list = new ArrayList<>();
        // 添加第一条数据
        list.add(new DatasetDemoVo(
            "谁发明了电话？",
            "电话的主要发明者是亚历山大·格拉汉姆·贝尔，他于1876年获得了电话的发明专利。"
        ));

        // 添加第二条数据
        list.add(new DatasetDemoVo(
            "地球上最大的哺乳动物是什么？",
            "地球上最大的哺乳动物是蓝鲸，成年蓝鲸体长可达30米，重量可达180吨。"
        ));

        // 添加第三条数据
        list.add(new DatasetDemoVo(
            "Python中列表和元组的主要区别是什么？",
            "列表是可变的，可以进行增删改操作；元组是不可变的，创建后不能修改。因此元组可以作为字典的键，而列表不能。"
        ));

        // 添加第四条数据
        list.add(new DatasetDemoVo(
            "第一次工业革命开始于什么时候？",
            "第一次工业革命开始于18世纪60年代的英国，以蒸汽机的发明和应用为标志。"
        ));

        // 添加第五条数据
        list.add(new DatasetDemoVo(
            "水的化学式是什么？",
            "水的化学式是H₂O，表示一个水分子由两个氢原子和一个氧原子组成。"
        ));

        ExcelUtil.exportExcel(list, "数据集模板数据", DatasetDemoVo.class,response);
    }

    @DeleteMapping("/delete/{id}")
    @SaCheckPermission("evaluationTool:datasetManagement:del")
    @RepeatSubmit
    public R<String> deleteById(@PathVariable Long id)
    {
        datasetService.deleteById(id);
        return R.ok("删除成功");
    }

    @GetMapping("/list")
    public R<List<Dataset>> list(String appId)
    {
        List<Dataset> list = datasetService.selectDatasetList(appId);
        return R.ok(list);
    }


}
