package com.rj.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.rj.entity.LbPurchaseApply;
import jakarta.servlet.http.HttpServletResponse;

import java.time.LocalDate;
import java.util.Map;

public interface ILbPurchaseApplyService extends IService<LbPurchaseApply> {

    Map<String, Object> add(LbPurchaseApply entity);

    Map<String, Object> update(LbPurchaseApply entity);

    Map<String, Object> deleteById(Long id);

    Map<String, Object> pageQuery(Integer current,
                                  Integer size,
                                  String tenantId,
                                  String applyUser,
                                  String applyPhone,
                                  String colleagueName,
                                  String teamLeader,
                                  String teamBigLeader,
                                  LocalDate applyDate);

    Map<String, Object> listNeedPrivilegeRecommenders(LocalDate startDate, LocalDate endDate);

    /**
     * 按申请日期区间与租户筛选进货申请，对不重复的 {@code apply_phone} 调用 hxrd 用户查询与更新接口，
     * 写入 {@code max_order}、VIP/转卖/状态 及 {@code viptime}（周末先对齐到下一工作日，再顺延 3 个工作日）。
     */
    Map<String, Object> syncHxrAdminUserVipByApplyDateRange(
            LocalDate applyDateStart, LocalDate applyDateEnd, String tenantId, Integer maxOrder);

    /**
     * 按申请日期区间与租户筛选进货申请，对每条记录的 {@code colleague_phone} 调用 hxrd 用户查询与更新，
     * 仅当 {@code colleague_name} 能在 {@code lb_daily_user_trade}（同租户、按 nickname）中查到时才开通；
     * 以 {@code apply_date} 为起算日计算 {@code viptime}（周末先对齐到下一工作日，再顺延 2 个工作日）。
     */
    Map<String, Object> syncHxrAdminColleagueVipByApplyDateRange(
            LocalDate applyDateStart, LocalDate applyDateEnd, String tenantId);

    /**
     * 根据订货自然语言描述调用大模型解析为 {@link LbPurchaseApply}（不落库）。
     *
     * @param orderInfo 订货信息原文
     * @param tenantId  当前登录人租户 ID（回填到结果实体，覆盖模型输出）
     */
    Map<String, Object> parseFromOrderInfoByLlm(String orderInfo, String tenantId);

    /**
     * 按申请日期区间与租户导出进货申请 Excel（按申请日分组，首列合并单元格）。
     */
    void exportExcel(LocalDate applyDateStart, LocalDate applyDateEnd, String tenantId, HttpServletResponse response);

    /**
     * 导出与 {@link #syncHxrAdminColleagueVipByApplyDateRange} 相同筛选条件下的同事特权开通提醒 Excel。
     */
    void exportColleagueVipExcel(
            LocalDate applyDateStart, LocalDate applyDateEnd, String tenantId, HttpServletResponse response);
}
