package com.pz.merchant.controller.applet;

import cn.dev33.satoken.annotation.SaIgnore;
import com.dtflys.forest.annotation.Put;
import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.domain.R;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.validate.EditGroup;
import com.pz.common.helper.LoginHelper;
import com.pz.merchant.domain.bo.EmployeesListBo;
import com.pz.merchant.domain.bo.OrderBo;
import com.pz.merchant.domain.bo.SetEmployeeWorkingHourBo;
import com.pz.merchant.domain.vo.EmployeesListVo;
import com.pz.merchant.domain.vo.OrderInfoVO;
import com.pz.merchant.domain.vo.TodayOrderListVo;
import com.pz.merchant.service.IEmployeesService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.constraints.NotNull;

/**
 * 商户[小程序]
 *
 * @author WangMin
 * @date 2023-09-11
 */
@Validated
@RequiredArgsConstructor
@RestController("AppEmployeesController")
@RequestMapping("/merchant/app/employees")
public class EmployeesController extends BaseController {

    private final IEmployeesService employeesService;


    /**
     * 查询陪诊员列表
     */
    @GetMapping("/list")
    public TableDataInfo<EmployeesListVo> employeesList(EmployeesListBo bo, PageQuery pageQuery) {
        return employeesService.employeesList(bo, pageQuery);
    }

    /**
     * 设置员工工作时间段
     *
     * @param bo 员工参数信息
     * @return 操作结果
     */
    @PutMapping("/setWorkHour")
    public R<Boolean> setEmployeesWorkHour(@RequestBody @Validated(EditGroup.class) SetEmployeeWorkingHourBo bo) {
        return R.ok(employeesService.setEmployeesWorkHours(bo));
    }

    /**
     * 查询员工详情及今日订单数据
     *
     * @param emId 员工ID
     */
    @GetMapping("/detail")
    public R<TodayOrderListVo> getEmployeeTodayData(@NotNull(message = "员工ID不能为空") Integer emId) {
        return R.ok(employeesService.queryEmployeesInfo(emId));
    }

    /**
     * 查询员工所有订单
     *
     * @param bo        筛选条件
     * @param pageQuery 分页
     * @return 订单列表
     */
    @GetMapping("/order/list")
    public TableDataInfo<OrderInfoVO> getAllOrders(OrderBo bo, PageQuery pageQuery) {
        return employeesService.queryAllOrder(bo, pageQuery);
    }

    /**
     * 切换用户 身份
     *
     * @param emId 陪诊员ID
     * @return 切换用户身份结果
     */
    @PutMapping("/switchIdentity")
    public R<Boolean> switchIdentity(@NotNull(message = "陪诊员ID不能为空") Integer emId) {
        return R.ok(employeesService.switchEmployeeIdentity(emId));
    }

    /**
     * 切换用户状态
     *
     * @param emId 陪诊员ID
     * @return 切换用户状态结果
     */
    @PutMapping("/switchStatus")
    public R<Boolean> switchStatus(@NotNull(message = "陪诊员ID不能为空") Integer emId) {
        return R.ok(employeesService.disableOrRecover(emId));
    }


}