package com.zg.project.wisdom.service;

import com.zg.project.wisdom.domain.vo.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/** 首页统计服务 */
public interface RkStatisticsService {

    /** 库龄统计（仅未出库） */
//    RkAgeStatVO getAgeStats();

    /** 新增：返回 Map */
    List<Map<String, Object>> getAgeStatsAsList();

    /** 入库类型汇总（未出库） */
    List<RkSummaryVO> getTypeSummary();

    /**
     * 县局汇总（未出库）
     */
    List<RkSummaryVO> getCountySummary();


    /**
     * 一周天级统计（一个接口返回入库+出库）
     * @param start 可空（yyyy-MM-dd）
     * @param end   可空（yyyy-MM-dd）
     * @return { "in": List<DayCountyStatVO>, "out": List<DayCountyStatVO> }
     */
    Map<String, Object> weekDaily(String start, String end);

    /**
     * 库龄统计（>30天 & >60天）：项目数、条目数、总金额 + 两个明细列表
     */
    Age3060ResultVO getAge3060Detail();

    List<Map<String, Object>> getAge3060();

    /** 导出库龄明细（>30 与 >60 合并导出） */
    void exportAge3060(HttpServletResponse response);

    /**
     * 获取入库类型饼状图数据
     * @return 入库类型饼图统计列表
     */
    List<RkTypePieVO> getTypePie();

    /**
     * 按入库类型统计（时间范围）
     * @param start 开始日期（建议 yyyy-MM-dd）
     * @param end   结束日期（建议 yyyy-MM-dd）
     * @return 每个入库类型的项目数、条目数、总数量、总金额
     */
    List<RkTypePieVO> getTypeSummaryByRange(String start, String end);

    /**
     * 按出库类型统计（时间范围）
     * 口径：仅统计已出库（is_chuku = 1），排除删除；出库类型非空
     * 时间字段：ly_time（自然日闭区间 [start, end]，参数建议 yyyy-MM-dd）
     */
    List<RkTypePieVO> getOutTypeSummaryByRange(String start, String end);

    /** 本月入/出库汇总（项目数/条目数/总数量/总金额） */
    RkMonthInOutSummaryVO getThisMonthInOutSummary();

    /** 供应计划：应到未到统计（未到、部分未到、合计） */
    GysJhUndeliveredVO getUndeliveredSummary();

    /** 当前库存：按物资类型统计 */
    List<WlTypeStockStatVO> getCurrentStockByWlType();

    /** 当前库存 “入库时间 >30 天”的四项汇总 */
    RkTypePieVO getAgeGt30Summary();

    /**
     * range: 0=最近一周(日)；2=最近半年(月)
     * 返回每个时间桶的一行数据（固定 7 行或 6 行）
     */
    List<IOBucketVO> getIOBuckets(Integer range);


    /**
     * 根据仓库编码，返回各场景的可用库位（含数量与明细）
     * 规则：排除 rk_info 中未出库（is_chuku=0 或 NULL）的占用库位
     */
    List<SceneAvailableVO> listAvailableByWarehouse(String warehouseCode);
}
