package com.aucma.api.controller;

import com.aucma.api.domain.dto.CheckInfoDto;
import com.aucma.api.domain.dto.RepairSubmitInfoDto;
import com.aucma.api.service.IPdaBindingService;
import com.aucma.common.core.domain.AjaxResult;
import com.aucma.common.utils.StringUtils;
import com.aucma.report.domain.ReportQualityInspection;
import com.aucma.report.service.IReportQualityInspectionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;
import java.util.Optional;

import static com.aucma.common.core.domain.AjaxResult.error;
import static com.aucma.common.core.domain.AjaxResult.success;

/**
 * @author wanghao
 * @date 2023/11/14  9:28
 */
@RestController
@RequestMapping("/api")
public class PdaApiController {

    @Autowired
    private IPdaBindingService service;

    //壳胆绑定-提交
    @PostMapping("/boxBanding")
    public AjaxResult binding(String boxCode, String innerCode, String loginName) {
        String boxName = service.selectBoxNameByCode(boxCode);
        if (StringUtils.isNotNull(boxName)) {
            service.insertBindingInfo(boxCode, boxName, innerCode);
            return success();
        }
        return error("箱壳条码扫描错误");
    }

    //条码绑定
    @PostMapping("/barCodeBanding")
    public AjaxResult barCodeBanding(String boxCode, String innerCode, String loginName) {
//        查询质检缺陷有没有修复
        int countQa = service.countQualityRecordByCode(boxCode);
        if (countQa > 0) {
            return error("返修中" + countQa + "条未处理，不允许绑定");
        }
//        查询插入
        return toAjax(service.updateCodeBinding(boxCode, innerCode));
    }

    @PostMapping("/selectGoodsName")
    public AjaxResult selectGoodsName(String code) {
        String boxName = service.selectBoxNameByCode(code);
        if (boxName == null) {
            return error("查询失败，条码不正确");
        }
        return success("操作成功", boxName);
    }

    @Autowired
    private IReportQualityInspectionService qualityService;

    //    质检查询名称、前工位返修数据
    @PostMapping("/check/select")
    public AjaxResult checkSelect(String code) {
        String boxName = service.selectBoxNameByCode(code);
        if (boxName == null) {
            // boxName = "固定数据";
           return error("箱壳条码扫描错误");
        }
        List<ReportQualityInspection> list = service.checkSelectRepairInfo(code);
        return success(boxName, list);

    }

    //    质检提交
    @PostMapping("/checkSubmit")
    public AjaxResult checkSubmit(@RequestBody CheckInfoDto checkInfo) {
        List<CheckInfoDto.DefectBeen> list = checkInfo.getList();
        int size = (list == null || list.isEmpty()) ? 1 : list.size();
        for (int i = 0; i < size; i++) {
            ReportQualityInspection inspection = new ReportQualityInspection();
            inspection.setBarCode(checkInfo.getCode());
            inspection.setMaterialName(checkInfo.getName());
            String measure = checkInfo.getMeasure();
            inspection.setTreatmentMeasure(measure);
            if (measure.equals("3")){ inspection.setIsFlag(1L);}
            //检测人
            inspection.setInspectorCode(checkInfo.getUserName());
            inspection.setInspectorTime(new Date());
            inspection.setStationCode(checkInfo.getStationCode());
            inspection.setGroupCode(checkInfo.getTeamCode());
            assert list != null;
            if (!list.isEmpty()) {
                CheckInfoDto.DefectBeen defectBeen = list.get(i);
                inspection.setSubmitQualtyId(defectBeen.getObjId());
                inspection.setTestItemCode(list.get(i).getStationCode());

                inspection.setQualityDefectCode(list.get(i).getQualityDefectCode());
                inspection.setQualityDefectName(list.get(i).getQualityDefectName());
            }
            qualityService.insertReportQualityInspection(inspection);
        }

        return success();
    }

    //返修查询质检信息
    @PostMapping("/findCheckInfoByCode")
    public AjaxResult findCheckInfoByCode(String code) {
        List<ReportQualityInspection> list = service.findCheckInfoByCode(code);
        if (list == null || list.isEmpty()) {
            return error("扫描条码不正确");
        }
        return success(list);
    }

    //返修提交质检信息
    @PostMapping("/submitRepair")
    public AjaxResult submitRepair(@RequestBody RepairSubmitInfoDto info) {
        return toAjax(service.submitRepair(info));
    }


    private AjaxResult toAjax(int rows) {
        return rows > 0 ? AjaxResult.success() : AjaxResult.error();
    }

}
