package jnpf.attendance.controller;


import jnpf.attendance.service.AttendanceShiftSettingService;
import jnpf.base.ActionResult;
import jnpf.exception.HandleException;
import jnpf.model.attendance.dto.AttendanceShiftDto;
import jnpf.model.attendance.vo.AttendanceShiftSettingVo;
import jnpf.model.attendance.vo.ShiftPeriodVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 考勤组配置-考勤配置 前端控制器
 * </p>
 *
 * @author ahua
 * @since 2023-11-22
 */
@RestController
@RequestMapping("/shifts/setting")
public class AttendanceShiftSettingController {
    @Autowired
    private AttendanceShiftSettingService attendanceShiftSettingService;

    /**
     * 根据考勤组ID查询班次设置。
     *
     * @param groupId 考勤组ID
     * @return 班次设置视图对象
     */
    @GetMapping("{groupId}")
    public ActionResult<AttendanceShiftSettingVo> findByGroupId(@PathVariable("groupId") String groupId) {
        return ActionResult.success(attendanceShiftSettingService.findByGroupId(groupId));
    }

    /**
     * 保存班次设置信息。
     *
     * @param dto 班次设置数据传输对象
     * @throws HandleException 处理异常
     * @return 处理结果视图对象
     */
    @PostMapping
    public ActionResult save(@RequestBody AttendanceShiftDto dto) throws HandleException {
        attendanceShiftSettingService.save(dto);
        return ActionResult.success();
    }

    /**
     * 删除指定的班次周期。
     *
     * @param periodId 班次周期ID
     * @return 处理结果视图对象
     */
    @DeleteMapping("/period/{periodId}")
    public ActionResult delPeriod(@PathVariable("periodId") String periodId) {
        attendanceShiftSettingService.delPeriod(periodId);
        return ActionResult.success();
    }

    /**
     * 更改班次设置的启用状态。
     *
     * @param groupId 考勤组ID
     * @param enable  启用状态（0禁用，1启用）
     * @return 处理结果视图对象
     */
    @PutMapping("changeStatus")
    public ActionResult changeStatus(@RequestParam String groupId, @RequestParam Integer enable) {
        attendanceShiftSettingService.changeStatus(groupId, enable, null);
        return ActionResult.success();
    }

    /**
     * 根据考勤组ID获取班次时段列表。
     *
     * @param groupId 考勤组ID
     * @return 班次周期视图对象列表
     */
    @GetMapping("/period/list")
    public ActionResult<List<ShiftPeriodVo>> periodList(@RequestParam("groupId") String groupId) {
        return ActionResult.success(attendanceShiftSettingService.periodList(groupId));
    }
    /**
     * 自我排班的班次列表
     *
     * @return
     */
    @GetMapping("/self/period/list")
    public ActionResult<List<ShiftPeriodVo>> periodListForSelfScheduling() {
        return ActionResult.success(attendanceShiftSettingService.periodListForSelfScheduling());
    }

}

