package vip.xiaonuo.disk.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qiwenshare.common.result.RestResult;
import vip.xiaonuo.common.pojo.CommonResult;
import vip.xiaonuo.disk.domain.CapacityAuditInfo;
import vip.xiaonuo.disk.domain.StorageBean;
import vip.xiaonuo.disk.dto.storage.GetUserStorageDTO;
import vip.xiaonuo.disk.util.TableDataInfo;
import vip.xiaonuo.disk.vo.storage.CapacityAuditInfoVo;
import vip.xiaonuo.disk.vo.storage.StorageBeanVO;

import java.util.List;

public interface IStorageService extends IService<StorageBean> {
    Long getTotalStorageSize(String userId);
    boolean checkStorage(String userId, Long fileSize);

    /**
     * 查询当前默认创建空间大小 单位MB
     *
     * @return 默认创建空间大小
     */
    CommonResult<Long> getDefaultStorage();

    /**
     * 修改当前默认创建空间大小 单位MB
     *
     * @return 修改结果
     */
    CommonResult<String> updateDefaultStorage(Long size);

    /**
     * 查询所有用户的存储空间大小 单位MB
     *
     * @return 所有用户的存储空间大小
     */
    CommonResult<TableDataInfo<StorageBeanVO>> getUserStorageList(GetUserStorageDTO getUserStorageDTO);

    /**
     * 更改用户的存储空间大小 单位MB
     *
     * @param getUserStorageDTO 更改条件
     *
     * @return 更改结果
     */
    CommonResult<String> updateUserStorage(GetUserStorageDTO getUserStorageDTO);

    /**
     * 用户查看自己的存储空间大小 单位MB
     *
     * @return 用户存储空间大小
     */
    CommonResult<Long> getUserStorage();

    /**
     * 提交改变存储空间大小的申请
     *
     * @param capacityAuditInfo 申请信息
     *
     * @return 提交结果
     */
    CommonResult<String> applyChangeStorage(CapacityAuditInfo capacityAuditInfo);

    /**
     * 查看申请扩容审核列表
     *
     * @param objectPage 分页参数
     * @param auditState 审核状态
     * @param usernameOrNickname 用户名或昵称
     * @return 审核列表信息
     */
    CommonResult<TableDataInfo<CapacityAuditInfoVo>> getCapacityAuditList(Integer pageNum, Integer pageSize, Integer auditState, String usernameOrNickname);

    /**
     * 查询存储空间大小变更申请详情
     *
     * @param id 申请ID
     * @return 申请详情
     */
    CommonResult<CapacityAuditInfoVo> getCapacityAuditDetail(String id);

    /**
     * 审核扩容申请
     *
     * @param id 申请ID
     * @param auditState 审核状态
     * @param rejectReason 拒绝原因
     * @return 审核结果
     */
    CommonResult<String> auditCapacityAudit(String id, Integer auditState, String rejectReason);

    /**
     * 用户查看自己申请记录列表
     *
     * @param objectPage 分页参数
     * @param auditState 申请状态 0待审核 1审核通过 2拒绝
     *
     * @return 申请记录列表
     */
    CommonResult<TableDataInfo<CapacityAuditInfoVo>> getUserCapacityAuditList(Integer pageNum, Integer pageSize, Integer auditState);
}
