package com.luojia_channel.modules.admin.service;

import com.luojia_channel.common.domain.page.PageResponse;
import com.luojia_channel.modules.admin.dto.*;

import java.util.Map;

/**
 * 管理员服务接口
 */
public interface AdminService {
    /**
     * 获取系统总览数据
     * @return 总览数据
     */
    AdminOverviewDTO getOverview();
    
    /**
     * 获取用户列表
     * @param page 页码
     * @param size 每页数量
     * @param keyword 搜索关键词
     * @param role 角色
     * @param status 状态
     * @return 用户列表分页结果
     */
    PageResponse<AdminUserDTO> getUserList(Integer page, Integer size, String keyword, Integer role, Integer status);
    
    /**
     * 修改用户状态
     * @param id 用户ID
     * @param status 状态
     */
    void changeUserStatus(Long id, Integer status);
    
    /**
     * 修改用户角色
     * @param id 用户ID
     * @param role 角色
     */
    void changeUserRole(Long id, Integer role);
    
    /**
     * 获取帖子列表
     * @param page 页码
     * @param size 每页数量
     * @param keyword 搜索关键词
     * @param categoryId 分类ID
     * @param status 状态
     * @return 帖子列表分页结果
     */
    PageResponse<AdminPostDTO> getPostList(Integer page, Integer size, String keyword, Long categoryId, Integer status);
    
    /**
     * 删除帖子
     * @param id 帖子ID
     */
    void deletePost(Long id);
    
    /**
     * 修改帖子状态
     * @param id 帖子ID
     * @param action 操作类型
     */
    void changePostStatus(Long id, Integer action);
    
    /**
     * 获取评论列表
     * @param page 页码
     * @param size 每页数量
     * @param keyword 搜索关键词
     * @param postId 帖子ID
     * @return 评论列表分页结果
     */
    PageResponse<AdminCommentDTO> getCommentList(Integer page, Integer size, String keyword, Long postId);
    
    /**
     * 删除评论
     * @param id 评论ID
     */
    void deleteComment(Long id);
    
    /**
     * 获取用户统计数据
     * @param type 统计类型
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 统计数据
     */
    Map<String, Object> getUserStatistics(String type, String startDate, String endDate);
    
    /**
     * 获取帖子统计数据
     * @param type 统计类型
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 统计数据
     */
    Map<String, Object> getPostStatistics(String type, String startDate, String endDate);
} 