package cn.wisenergy.service;

import cn.wisenergy.model.app.WorkTimeOrder;
import cn.wisenergy.model.dto.*;
import cn.wisenergy.model.vo.OrderChangeManagerVo;
import cn.wisenergy.model.vo.OrderChangeVo;
import com.github.pagehelper.PageInfo;

import java.util.Date;
import java.util.List;


/**
 *
 * @author chenqi
 * @since 2021-01-19
 */
public interface WorkTimeOrderService {



    /**
     * 功能; 获取某日被驳回说明
     *
     * @param userId  用户id
     * @param workDay 某日
     * @return 工单集合
     */
    List<WorkTimeOrder> getByDay(Integer userId, Date workDay);

    /**
     * 功能：获取某日填报小计
     *
     * @param userId  用户id
     * @param workDay 某日
     * @return 填报小计
     */
    SubtotalDto getSubtotalReport(Integer userId, Date workDay);

    /**
     * 功能; 获取某日填报信息
     *
     * @param userId  用户id
     * @param workDay 工作日
     * @return dto
     */
    List<WorkTimeOrder> getByDayToDto(Integer userId, Date workDay);



    /**
     * 功能：获取待审批数据
     *
     * @param userId    用户id
     * @param projectId 项目id
     * @param type      项目类型
     * @param status    状态
     * @return 自定义dto
     */
    PageInfo<WorkTimeOrderDto> getExamine(Integer userId, Integer projectId, Integer type, Integer page, Integer pageSize, List<Integer> status);

    /**
     *  功能：获取小程序待审批
     * @param userId 用户id
     * @param projectId 项目Id
     * @param type 类型
     * @return 小程序Dto
     */
    List<AppletsPendApprovalDto> getExamineApplets(Integer userId, Integer projectId, Integer type);

    /**
     * 功能：批量审批
     *
     * @param reviewerId 审批人
     * @param ids        工单
     * @return 是否成功
     */
    Boolean examineByIds(Integer reviewerId, List<Integer> ids);

    /**
     * 功能： 驳回
     *
     * @param reviewerId 审核人id
     * @param id         工单id
     * @param reason     驳回理由
     * @return 是否成功
     */
    Boolean rejectById(Integer reviewerId, Integer id, String reason);

    /**
     * 功能：查询驳回未提交的
     *
     * @param userId 用户id
     * @return dto
     */
    List<WorkTimeOrderDto> rejectNotSubmit(Integer userId);

    /**
     * 功能：获取用户参与的项目
     * @param userId
     * @return
     */
    ProjectsDto getProjectDto(Integer userId);

    List<WorkTimeOrderDto> wtoToWtod(List<WorkTimeOrder> workTimeOrders);


    /**
     * 功能：测试添加
     * @param createWorkOrderDto
     * @return
     */
    List<WorkTimeOrderDto> addOrder(CreateWorkOrderDto createWorkOrderDto);


    /**
     * 功能：获取当天填报总状态
     * @param userId
     * @param workDay
     * @return
     */
    int statusYes(Integer userId, Date workDay);

    /**
     * 获取本部门 填报缺失信息
     * @param userId
     * @return
     */
    NotWorkSubmitOrderDto getDeptNotOrderInfo(Integer userId);

    /**
     * 工单变更管理分页
     * @param vo 条件
     * @return 分页
     */
    PageInfo<OrderChangePageDto> getOrderChangePage(OrderChangeManagerVo vo);


    Boolean createOrderChange(OrderChangeVo vo);

    Boolean updateOrderChange(OrderChangeVo vo);


    Boolean deleteOrderChange(Integer workId, Integer operator,String changeReason);

    /**
     * 请长假
     * @param takeALongLeaveParam
     * @return
     */
    Boolean takeALongLeave(TakeALongLeaveParam takeALongLeaveParam);

    /**
     * 返回用户长假或长调休信息
     * @param userId
     * @return
     */
    List<LeaveResult> getUserLongLeaveInfo(Integer userId);

    /**
     * 时间段内的节假日天数
     * @param startDate
     * @param endDate
     * @return
     */
    Integer getHolidayCountWithTimePeriod(String startDate, String endDate);
}
