package com.example.his.api.mis.controller;

import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.bean.BeanUtil;
import com.example.his.api.common.result.R;
import com.example.his.api.mis.service.AppointmentService;
import com.example.his.api.req.MisAppointment.*;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

@RestController("MisAppointmentController")
@RequestMapping("/mis/check")
public class AppointmentController {

    @Resource
    private AppointmentService appointmentService;

    /**
     * 体检预约-查询订单体检预约记录
     * @param id
     * @return
     */
    @GetMapping("/appointmnet")
    public R searchAppointmentList(@RequestParam Integer id) {
        ArrayList<HashMap> list = appointmentService.searchAppointmentList(id);
        return R.success(list);
    }


    /**
     * 体检预约-分页查询
     * @param form
     * @return
     */
    @PostMapping("/searchMisAppointmentByPage")
    @SaCheckPermission(value = {"CHECK:APPOINTMENT:SELECT"}, mode = SaMode.OR)
    public R searchMisAppointmentByPage(@RequestBody @Valid SearchForm form) {
        Map param = BeanUtil.beanToMap(form);
        PageInfo<HashMap> list = appointmentService.searchMisAppointmentByPage(param);
        return R.success(list);
    }

    /**
     * 体检预约-删除
     * @return
     */
    @PostMapping("/deleteAppointmentById")
    @SaCheckPermission(value = {"CHECK:APPOINTMENT:DELETE"}, mode = SaMode.OR)
    public R deleteAppointmentById(@RequestBody @Valid DeleteForm form) {
        Map param = BeanUtil.beanToMap(form);
        int rows = appointmentService.deleteAppointment(param);
        return R.success(rows);
    }

    /**
     * 体检签到-判断用户是否预约
     * @param form
     * @return
     */
    @PostMapping("/hasAppointInToday")
    @SaCheckPermission(value = {"CHECK:CHECKIN:SELECT"}, mode = SaMode.OR)
    public R hasAppointInToday(@RequestBody @Valid HasAppointInTodayForm form) {
        Map param = BeanUtil.beanToMap(form);
        int result = appointmentService.hasAppointInToday(param);
        return R.success(result);
    }

    /**
     * 体检签到-签到
     * @param form
     * @return
     */
    @PostMapping("/checkin")
    @SaCheckPermission(value = {"CHECK:CHECKIN:UPDATE"}, mode = SaMode.OR)
    public R checkin(@RequestBody @Valid CheckinForm form) {
        Map param = BeanUtil.beanToMap(form);
        boolean result = appointmentService.checkin(param);
        return R.success(result);
    }


    @GetMapping("/searchGuidanceInfo")
    public R searchGuidanceInfo(@RequestParam int id) {
        HashMap map = appointmentService.searchGuidanceInfo(id);
        return R.success(map);
    }

    /**
     * 体检签到-体检结束
     * @param form
     * @return
     */
    @PostMapping("/updateStatusByUuid")
    public R updateStatusByUuid(@RequestBody @Valid UpdateStatusByUuidForm form) {
        Map<String, Object> param = BeanUtil.beanToMap(form);
        boolean bool = appointmentService.updateStatusByUuid(param);
        return R.success(bool);
    }

    /**
     * 医生体检-查询体检人信息
     * @param uuid
     * @return
     */
    @GetMapping("/searchByUuid")
    public R searchByUuid(@RequestParam String uuid) {
        HashMap map = appointmentService.searchByUuid(uuid);
        return R.success(map);
    }


}
