package shop.alien.lawyer.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.store.LawyerUserViolation;
import shop.alien.entity.store.StoreDictionary;
import shop.alien.entity.store.UserLoginInfo;
import shop.alien.entity.store.dto.LawyerUserViolationDto;
import shop.alien.entity.store.vo.LawyerUserViolationVo;
import shop.alien.entity.store.vo.LawyerViolationDetailVO;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 律师用户举报 服务类
 * </p>
 *
 * @author system
 * @since 2025-01-XX
 */
public interface LawyerUserViolationService extends IService<LawyerUserViolation> {

    /**
     * 用户举报处理
     *
     * @param lawyerUserViolation 举报信息对象
     * @return 插入成功的记录数，失败返回0
     */
    int userReporting(LawyerUserViolation lawyerUserViolation);

    Map<String, Object> reportListByUserId(String userId);

    /**
     * 根据ID查询举报详情
     * <p>
     * 根据举报ID查询举报详细信息，包括被举报人信息、举报原因、举报凭证等
     * </p>
     *
     * @param id 举报记录ID，不能为空
     * @return 举报详情VO对象，如果记录不存在返回null
     * @throws RuntimeException 当参数无效或查询异常时抛出
     * @author system
     * @since 2025-01-XX
     */
    LawyerUserViolationVo reportListById(String id);

    IPage<LawyerUserViolationDto> getViolationPage(int pageNum, int pageSize, String orderNumber, String phone, String processingStatus, String reportedUserName, String reportedPhone, String violationReason, String startTime, String endTime);

    void approve(int id, String processingStatus, String reportResult);

    LawyerUserViolationDto byId(Integer id);

    LawyerUserViolationDto byIdNotice(Integer id);

    String exportExcel(String nickName, String phone, String processingStatus) throws IOException;

    String level(UserLoginInfo userLoginInfo);

    /**
     * 获取举报原因列表
     * <p>
     * 查询所有未删除的律师违规举报原因字典数据
     * </p>
     *
     * @return 举报原因字典列表，如果查询失败或没有数据则返回空列表
     * @author system
     * @since 2025-01-XX
     */
    List<StoreDictionary> getViolationReason();

    /**
     * 根据订单ID查询举报详情
     * <p>
     * 查询举报详情信息，包括举报的详情信息、订单的详情信息以及订单律师名字相关信息
     * </p>
     *
     * @param orderId 订单ID，必须大于0
     * @return 举报详情VO对象，包含举报信息、订单信息、律师信息，如果订单不存在或未举报则返回null
     * @author system
     * @since 2025-01-XX
     */
    LawyerViolationDetailVO getViolationDetailByOrderId(Integer orderId);
}

