package jnpf.personnels.controller.mcp;

import com.fantaibao.permission.annotation.FtbCheckPermission;
import jnpf.base.ActionResult;
import jnpf.model.personnels.vo.mcp.OnboardingThisMonthStatsVO;
import jnpf.model.personnels.vo.mcp.StaffBirthdayVO;
import jnpf.model.personnels.vo.mcp.StaffNotSignContractVO;
import jnpf.model.personnels.vo.mcp.SubmittedButNotOnboardedVO;
import jnpf.model.personnels.po.FtbPersonnelsStaffEmploymentApply;
import jnpf.personnels.service.FtbPersonStaffMCPService;
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 java.util.List;

/**
 * 人事花名册mcp模块
 * @author wcx
 * @date 2026/05/06
 */
@RestController
@RequestMapping("/mcp-ai/person-staff")
public class FtbPersonStaffMCPController {

    @Resource
    private FtbPersonStaffMCPService ftbPersonStaffMCPService;

    /**
     * 查询已提交登记表但未办理入职的人员
     * @return 已提交登记表但未办理入职的人员列表
     */
    @GetMapping("/submitted-but-not-onboarded")
    @FtbCheckPermission("entryManagea")
    public ActionResult<SubmittedButNotOnboardedVO<FtbPersonnelsStaffEmploymentApply>> getSubmittedButNotOnboarded() {
        List<FtbPersonnelsStaffEmploymentApply> list = ftbPersonStaffMCPService.getSubmittedButNotOnboarded();
        SubmittedButNotOnboardedVO<FtbPersonnelsStaffEmploymentApply> result = new SubmittedButNotOnboardedVO<>();
        result.setTotal(list.size());
        result.setList(list);
        return ActionResult.success(result);
    }

    /**
     * 入职统计：newEmployeesThisMonth 为入职管理表在指定时间段内新增（按创建时间）；
     * completedOnboardingThisMonth 为其中在指定时间段内已在花名册完成入职流程的人数（审批通过/直接办理已到岗/花名册导入等口径）
     * @param startTime 开始时间（格式：yyyy-MM-dd）
     * @param endTime 结束时间（格式：yyyy-MM-dd）
     */
    @GetMapping("/count-onboarded-this-month")
    @FtbCheckPermission("entryManagea")
    public ActionResult<OnboardingThisMonthStatsVO> getOnboardingThisMonthStats(
            @RequestParam(value = "startTime", required = false) String startTime,
            @RequestParam(value = "endTime", required = false) String endTime) {
        return ActionResult.success(ftbPersonStaffMCPService.getOnboardingThisMonthStats(startTime, endTime));
    }

    /**
     * 查询未提交登记表的员工列表
     * @return 未提交登记表的员工列表（包含姓名、电话等详细信息）
     */
    @GetMapping("/list-not-submitted-form")
    @FtbCheckPermission("entryManagea")
    public ActionResult<List<FtbPersonnelsStaffEmploymentApply>> getListOfNotSubmittedForm() {
        return ActionResult.success(ftbPersonStaffMCPService.getListOfNotSubmittedForm());
    }

    /**
     * 查询本月生日的员工列表
     * @return 本月生日员工列表（包含姓名、组织、岗位）
     */
    @GetMapping("/birthday-this-month")
    @FtbCheckPermission("employeeRoster")
    public ActionResult<List<StaffBirthdayVO>> getStaffBirthdayList() {
        return ActionResult.success(ftbPersonStaffMCPService.getStaffBirthdayList());
    }

    /**
     * 查询手机号是否在黑名单中
     * @param phone 手机号
     * @return true为在黑名单中，false为不在黑名单中
     */
    @GetMapping("/check-blacklist")
    @FtbCheckPermission("blacklistManagement")
    public ActionResult<Boolean> checkBlacklist(@RequestParam("phone") String phone) {
        return ActionResult.success(ftbPersonStaffMCPService.isInBlacklist(phone));
    }

    /**
     * 查询入职半月还未签署合同的员工列表
     * @return 未签署合同的已入职员工列表
     */
    @GetMapping("/not-signed-contract-half-month")
    public ActionResult<List<StaffNotSignContractVO>> getListNotSignedContractHalfMonth() {
        return ActionResult.success(ftbPersonStaffMCPService.getListNotSignedContractHalfMonth());
    }
}
