package com.czg.controller.admin;

import com.alibaba.fastjson2.JSONObject;
import com.czg.EntryManager;
import com.czg.annotation.Debounce;
import com.czg.dto.req.AggregateMerchantDto;
import com.czg.dto.resp.WechatBankBranchRespDto;
import com.czg.order.entity.ShopDirectMerchant;
import com.czg.resp.CzgResult;
import com.czg.service.order.dto.AggregateMerchantVO;
import com.czg.service.order.dto.MerchantQueryDTO;
import com.czg.service.order.service.ShopDirectMerchantService;
import com.czg.task.EntryManagerTask;
import com.czg.utils.AssertUtil;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;

/**
 * 进件管理
 *
 * @author ww
 */
@AllArgsConstructor
@RestController
@RequestMapping("/admin/data/entryManager")
public class EntryManagerController {

    @Resource
    private ShopDirectMerchantService shopDirectMerchantService;
    @Resource
    private EntryManagerTask entryManagerTask;

    /**
     * ocr识别填充
     * 阿里 ocr识别图片
     * 本接口支持：PNG、JPG、JPEG、BMP、GIF、TIFF、WebP、PDF。
     * 图片长宽需要大于 15 像素，小于 8192 像素。
     * 长宽比需要小于 50。长宽均大于 500px。
     * 图片二进制文件不能超过 10MB。
     * 图片过大会影响接口响应速度，建议使用小于 1.5M 图片进行识别，
     *
     * @param url  图片地址
     * @param type IdCard	身份证
     *             BankCard	银行卡
     *             BusinessLicense	营业执照
     */
    @GetMapping("getInfoByImg")
    public CzgResult<JSONObject> getInfoByImg(String url, String type) throws Exception {
        return CzgResult.success(shopDirectMerchantService.getInfoByImg(url, type));
    }

    /**
     * 查询银行支行列表
     *
     * @param bankAliceCode 银行别名code bankAliasCode 从  /system/admin/common/bankInfo 获取
     * @param cityCode      市编码 wxProvinceCode      从  /system/admin/common/region   获取
     */
    @GetMapping("bankBranchList")
    public CzgResult<WechatBankBranchRespDto> queryBankBranchList(String bankAliceCode, String cityCode) {
        AssertUtil.isBlank(bankAliceCode, "请选择银行别名");
        AssertUtil.isBlank(cityCode, "请选择城市");
        return CzgResult.success(EntryManager.queryBankBranchList(bankAliceCode, cityCode));
    }

    /**
     * 获取进件列表
     */
    @GetMapping("list")
    public CzgResult<Page<ShopDirectMerchant>> getEntryList(MerchantQueryDTO queryParam) {
        return CzgResult.success(shopDirectMerchantService.getEntryList(queryParam));
    }


    /**
     * 获取进件信息
     */
    @GetMapping
    public CzgResult<AggregateMerchantVO> getEntry(Long shopId) {
        return CzgResult.success(shopDirectMerchantService.getEntry(shopId));
    }

    /**
     * 主动查询进件信息状态
     * 进件状态是INIT 待处理 AUDIT 审核中 SIGN 待签约
     * 3分钟内只能查一次
     */
    @GetMapping("queryEntry")
    @Debounce(value = "#shopId", interval = 1000 * 60 * 3)
    public CzgResult<Boolean> queryEntry(Long shopId) {
        entryManagerTask.entryManager(shopId);
        return CzgResult.success();
    }

    /**
     * 申请进件
     */
    @Debounce(value = "#reqDto.shopId")
    @PostMapping
    public CzgResult<Boolean> entryManager(@RequestBody AggregateMerchantDto reqDto) {
        return CzgResult.success(shopDirectMerchantService.entryManager(reqDto));
    }

}
