package shop.alien.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import shop.alien.entity.store.LawFirm;
import shop.alien.entity.store.vo.LawFirmListVO;
import shop.alien.entity.store.vo.LawFirmReconciliationVO;
import shop.alien.entity.store.vo.LawyerListVO;

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

/**
 * 律所表 Mapper 接口
 *
 * @author system
 * @since 2025-01-XX
 */
@Mapper
public interface LawFirmMapper extends BaseMapper<LawFirm> {

    /**
     * 查询律所对账统计信息
     *
     * @param firmId   律所ID（可选，不传则查询所有律所）
     * @param firmName 律所名称（可选，模糊查询）
     * @param startDate 开始日期（可选）
     * @param endDate   结束日期（可选）
     * @return 统计信息 Map，包含 order_count、total_amount、total_platform_service_fee
     */
    Map<String, Object> getLawFirmReconciliationStatistics(
            @Param("firmId") Integer firmId,
            @Param("firmName") String firmName,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate
    );

    /**
     * 查询所有律所的对账统计信息（按律所分组）
     *
     * @param firmName 律所名称（可选，模糊查询）
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 律所对账统计列表
     */
    List<LawFirmListVO> getAllLawFirmReconciliationStatistics(
            @Param("firmName") String firmName,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate
    );

    /**
     * 查询律所下所有律师的对账统计信息（按律师分组）
     *
     * @param firmId   律所ID
     * @param startDate 开始日期（可选）
     * @param endDate   结束日期（可选）
     * @return 律师对账统计列表
     */
    List<LawyerListVO> getLawyerReconciliationStatistics(
            @Param("firmId") Integer firmId,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate
    );

    /**
     * 查询律所下所有律师的对账统计信息（按律师分组，支持律师名称模糊查询）
     *
     * @param firmId    律所ID
     * @param lawyerName 律师名称（可选，模糊查询）
     * @param startDate 开始日期（可选）
     * @param endDate   结束日期（可选）
     * @return 律师对账统计列表
     */
    List<LawyerListVO> getLawyerReconciliationStatisticsWithName(
            @Param("firmId") Integer firmId,
            @Param("lawyerName") String lawyerName,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate
    );

    /**
     * 查询律师的已完成订单列表（分页）
     *
     * @param page     分页对象
     * @param lawyerId 律师ID
     * @return 律师订单列表（分页）
     */
    IPage<LawFirmReconciliationVO> getLawyerOrderList(
            Page<LawFirmReconciliationVO> page,
            @Param("lawyerId") Integer lawyerId
    );
}


