package com.dora.service;

import com.dora.dto.ToolDto;
import com.dora.entity.ToolConfig;

import java.time.LocalDate;
import java.util.List;

/**
 * 管理端工具配置服务接口
 */
public interface AdminToolConfigService {

    // ==================== 工具配置管理 ====================

    /**
     * 获取所有工具配置
     *
     * @return 工具配置列表
     */
    List<ToolDto.ConfigResponse> getAllConfigs();

    /**
     * 根据ID获取工具配置
     *
     * @param id 工具ID
     * @return 工具配置
     */
    ToolDto.ConfigResponse getConfigById(Long id);

    /**
     * 创建工具配置
     *
     * @param request 创建请求
     * @return 创建后的配置
     */
    ToolDto.ConfigResponse createConfig(ToolDto.ConfigRequest request);

    /**
     * 更新工具配置
     *
     * @param id      工具ID
     * @param request 更新请求
     * @return 更新后的配置
     */
    ToolDto.ConfigResponse updateConfig(Long id, ToolDto.ConfigRequest request);

    /**
     * 更新工具积分消耗
     *
     * @param id         工具ID
     * @param pointsCost 积分消耗
     * @return 是否成功
     */
    boolean updatePointsCost(Long id, Integer pointsCost);

    /**
     * 更新工具状态（启用/禁用）
     *
     * @param id        工具ID
     * @param isEnabled 是否启用
     * @return 是否成功
     */
    boolean updateStatus(Long id, Integer isEnabled);

    /**
     * 删除工具配置
     *
     * @param id 工具ID
     * @return 是否成功
     */
    boolean deleteConfig(Long id);

    // ==================== 使用统计 ====================

    /**
     * 获取统计汇总
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 统计汇总
     */
    ToolDto.StatsSummaryResponse getStatsSummary(LocalDate startDate, LocalDate endDate);

    /**
     * 获取每日统计列表
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @param toolCode  工具编码（可选）
     * @return 每日统计列表
     */
    List<ToolDto.DailyStatsResponse> getDailyStats(LocalDate startDate, LocalDate endDate, String toolCode);

    /**
     * 手动刷新某天的统计数据
     *
     * @param date 日期
     */
    void refreshDailyStats(LocalDate date);

    /**
     * 获取工具统计信息
     *
     * @return 统计信息
     */
    ToolStatsInfo getToolStatsInfo();

    /**
     * 工具统计信息
     */
    class ToolStatsInfo {
        private Long totalTools;
        private Long enabledTools;
        private Long todayCalls;
        private Long todayPointsCost;

        public ToolStatsInfo() {}

        public ToolStatsInfo(Long totalTools, Long enabledTools, Long todayCalls, Long todayPointsCost) {
            this.totalTools = totalTools;
            this.enabledTools = enabledTools;
            this.todayCalls = todayCalls;
            this.todayPointsCost = todayPointsCost;
        }

        public Long getTotalTools() { return totalTools; }
        public void setTotalTools(Long totalTools) { this.totalTools = totalTools; }
        public Long getEnabledTools() { return enabledTools; }
        public void setEnabledTools(Long enabledTools) { this.enabledTools = enabledTools; }
        public Long getTodayCalls() { return todayCalls; }
        public void setTodayCalls(Long todayCalls) { this.todayCalls = todayCalls; }
        public Long getTodayPointsCost() { return todayPointsCost; }
        public void setTodayPointsCost(Long todayPointsCost) { this.todayPointsCost = todayPointsCost; }
    }
}
