package com.xinyilu.web.controller.applet;

import com.xinyilu.common.core.controller.BaseController;
import com.xinyilu.common.core.domain.AjaxResult;
import com.xinyilu.common.custominterface.Update;
import com.xinyilu.common.utils.regex.RegexUtil;
import com.xinyilu.system.domain.dto.AppletParentDTO;
import com.xinyilu.system.domain.dto.AppletStudentDTO;
import com.xinyilu.system.service.applet.AppletService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Objects;

/**
 * @Description 微信小程序端控制器
 * @Author 纪寒
 * @Date 2022-08-17 15:40:15
 * @Version 1.0
 */
@Slf4j
@RestController
@RequestMapping("/kindergarten/applet")
public class AppletController extends BaseController {

    @Resource
    private AppletService appletService;
    @Resource
    private RegexUtil regexUtil;

    /**
     * 根据小程序登录唯一凭证获取用户的微信标识信息、手机号、以及该家长所属孩子信息
     *
     * @param loginCode 唯一登录凭证
     * @param phoneCode 手机号获取凭证
     * @return 家长的手机号信息
     */
    @PostMapping("/kindergartenLogin")
    public AjaxResult kindergartenLogin(@RequestParam("loginCode") String loginCode, @Param("phoneCode") String phoneCode) {
        log.info("请求小程序接口成功，loginCode：{}， phoneCode：{}", loginCode, phoneCode);
        if (StringUtils.isBlank(loginCode)) {
            return AjaxResult.error("登录凭证不存在");
        }
        if (StringUtils.isBlank(phoneCode)) {
            return AjaxResult.error("获取手机号凭证不存在");
        }
        return appletService.appletLogin(loginCode, phoneCode);
    }

    /**
     * 绑定家长手机号信息
     *
     * @param appletParentDTO 输入参数
     * @return 结果
     */
    @PostMapping("/bindParentInfo")
    public AjaxResult updateParentInfo(@RequestBody @Validated(Update.class) AppletParentDTO appletParentDTO) {
        //校验身份证号
        boolean regexCardNo = regexUtil.regexCardNo(appletParentDTO.getCardNo());
        if (BooleanUtils.isFalse(regexCardNo)) {
            return AjaxResult.error("身份证号不正确，请重新输入！");
        }
        //校验手机号
        boolean regexPhone = regexUtil.regexPhone(appletParentDTO.getPhone());
        if (BooleanUtils.isFalse(regexPhone)) {
            return AjaxResult.error("手机号不正确，请重新输入！");
        }
        return appletService.updateParentInfo(appletParentDTO);
    }

    /**
     * 根据学生id查询学生成绩信息
     *
     * @param dto 学生id集合
     * @return 成绩信息
     */
    @PostMapping("/getStudentScoreInfo")
    public AjaxResult getStudentScoreInfo(@RequestBody AppletStudentDTO dto) {
        if (CollectionUtils.isEmpty(dto.getStudentIdList())) {
            return AjaxResult.error("学生信息不能位空！");
        }
        return appletService.getStudentScoreInfo(dto.getStudentIdList());
    }

    /**
     * 根据手机号获取家长以及孩子信息
     *
     * @param phone 手机号码
     * @return 家长孩子相关信息
     */
    @GetMapping("/getInfoByPhone")
    public AjaxResult getParentAndStudentInfoByPhone(@RequestParam("phone") String phone) {
        if (StringUtils.isBlank(phone)) {
            return AjaxResult.error("手机号不能为空");
        }
        return appletService.getParentAndStudentInfoByPhone(phone);
    }

    /**
     * 根据学生id和批次编号查询对应的报告地址
     *
     * @param studentId 学生id
     * @param batchCode 批次编号
     * @return 报告地址
     */
    @GetMapping("/getReportDownAddress")
    public AjaxResult getReportDownAddress(@RequestParam("studentId") Long studentId,
                                           @RequestParam("batchCode") String batchCode) {
        if (Objects.isNull(studentId)) {
            return AjaxResult.error("请选择学生信息！");
        }
        if (StringUtils.isBlank(batchCode)) {
            return AjaxResult.error("请选择所要查看的批次信息！");
        }
        return appletService.getReportDownAddress(studentId, batchCode);
    }

    /**
     * 根据学生id与测试项目编号查询学生最新批次的成绩与报告
     *
     * @param appletStudentDTO 学生id集合
     * @return java.util.List<com.xinyilu.system.domain.applet.AppletChildrenResultScoreInfo>
     **/
    @PostMapping("/getChildrenResultScore")
    public AjaxResult getChildrenResultScore(@RequestBody AppletStudentDTO appletStudentDTO) {
        if (CollectionUtils.isEmpty(appletStudentDTO.getStudentIdList())) {
            return AjaxResult.error("学生信息不能位空！");
        }
        return appletService.getChildrenResultScore(appletStudentDTO.getStudentIdList());
    }

    /**
     * 根据学生id和批次编号查询对应的处方
     *
     * @param studentId 学生id
     * @param batchCode 批次编号
     * @return TableDataInfo 列表信息
     */
    @GetMapping("/getMotionPrescription")
    public AjaxResult getMotionPrescription(@RequestParam("studentId") Long studentId, @RequestParam("batchCode") String batchCode) {
        if (Objects.isNull(studentId)) {
            return AjaxResult.error("学生信息不能为空！");
        }
        if (Objects.isNull(batchCode)) {
            return AjaxResult.error("批次信息不能为空！");
        }
        return appletService.getMotionPrescription(studentId, batchCode);
    }
}
