package jnpf.certificate.controller.app;

import com.github.pagehelper.PageInfo;
import jnpf.base.ActionResult;
import jnpf.base.vo.PageListVO;
import jnpf.certificate.service.CertificateAppRiskService;
import jnpf.model.certificate.req.app.CertificateAppEmployeeRiskQueryReq;
import jnpf.model.certificate.req.app.CertificateAppRiskChartReq;
import jnpf.model.certificate.req.app.CertificateAppStoreRiskQueryReq;
import jnpf.model.certificate.vo.app.CertificateAppEmployeeRiskVO;
import jnpf.model.certificate.vo.app.CertificateAppRiskChartVO;
import jnpf.model.certificate.vo.app.CertificateAppRiskReminderCountVO;
import jnpf.model.certificate.vo.app.CertificateAppStoreRiskVO;
import jnpf.util.FtbUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.validation.Valid;

/**
 * App端证照风险管理控制器。
 */
@RestController
@Validated
@RequestMapping("/app/certificate-risk")
public class AppCertificateRiskController {

    /**
     * 证照风险服务。
     */
    @Autowired
    private CertificateAppRiskService certificateAppRiskService;

    /**
     * 查询风险图表统计。
     *
     * @param req 查询参数（组织门店、证照类型）
     * @return 风险图表统计数据
     */
    @GetMapping("/query-chart")
    public ActionResult<CertificateAppRiskChartVO> queryChart(@Valid CertificateAppRiskChartReq req) {
        return ActionResult.success(certificateAppRiskService.queryChart(req));
    }

    /**
     * 分页查询员工证照风险列表。
     *
     * @param req 查询参数（组织门店、分页）
     * @return 员工证照风险分页结果（含分页信息与列表）
     */
    @GetMapping("/query-employee-page")
    public ActionResult<PageListVO<CertificateAppEmployeeRiskVO>> queryEmployeePage(@Valid CertificateAppEmployeeRiskQueryReq req) {
        PageInfo<CertificateAppEmployeeRiskVO> pageInfo = certificateAppRiskService.queryEmployeePage(req);
        // 返回员工证照风险分页数据。
        return ActionResult.page(pageInfo.getList(), FtbUtil.getPagination(pageInfo));
    }

    /**
     * 分页查询门店证照风险列表。
     * 默认仅查询缺失、过期、临期状态（1、2、3）。
     *
     * @param req 查询参数（组织门店、证照类型、分页）
     * @return 门店证照风险分页结果
     */
    @GetMapping("/query-store-page")
    public ActionResult<PageListVO<CertificateAppStoreRiskVO>> queryStorePage(@Valid CertificateAppStoreRiskQueryReq req) {
        PageInfo<CertificateAppStoreRiskVO> pageInfo = certificateAppRiskService.queryStorePage(req);
        return ActionResult.page(pageInfo.getList(), FtbUtil.getPagination(pageInfo));
    }

    /**
     * 查询风险提醒总数量。
     * 无入参，统计缺失、临期、过期的员工风险数量和组织风险数量。
     *
     * @return 风险提醒数量统计
     */
    @GetMapping("/query-reminder-count")
    public ActionResult<CertificateAppRiskReminderCountVO> queryReminderCount(@RequestParam(value = "orgId",required = false)String orgId) {
        return ActionResult.success(certificateAppRiskService.queryRiskReminderCount(orgId));
    }
}