#include "comm.h"


/**
 * 根据ID计算当前页码，若传入总数据量则同时计算总页数
 * @param id_num 输入的ID序号（需为正整数）
 * @param total_count 总数据量（传入0则仅计算当前页，需为非负整数）
 * @param per_page 每组/每页的数据量，默认8条（需为正整数）
 * @param result 输出参数，存储计算后的页码信息
 * @return bool 计算是否成功（true=成功，false=参数非法）
 */
bool calculate_page_info(int id_num, int total_count, int per_page, PageInfo *result) {
    // 初始化所有字段
    result->current_page = 0;
    result->total_pages = 0;
    result->current_page_items = 0;

    // 参数合法性校验
    if (id_num < 0) {  
        fprintf(stderr, "[page_calc] 错误：ID必须是大于等于0的整数！\n");
        return false;
    }
    if (per_page < 1) {
        fprintf(stderr, "[page_calc] 错误：每组数据量必须是大于0的整数！\n");
        return false;
    }
    if (total_count < 0) {
        fprintf(stderr, "[page_calc] 错误：总数据量必须是非负整数！\n");
        return false;
    }

    // 1. 适配0起始ID的当前页计算（核心修改）
    result->current_page = id_num / per_page + 1;

    // 2. 总页数计算（逻辑不变）
    if (total_count > 0) {
        result->total_pages = (total_count - 1) / per_page + 1;
    }

    // 3. 适配0起始ID的当前页数据项数计算（核心修改）
    if (total_count > 0) {
        int page_start_id = (result->current_page - 1) * per_page;  // 0起始的当前页起始ID
        int page_end_id = result->current_page * per_page - 1;      // 0起始的当前页理论结束ID
        // 若理论结束ID超过总数据量，取最后一个有效ID（total_count-1）
        page_end_id = (page_end_id >= total_count) ? (total_count - 1) : page_end_id;
        // 当前页数据项数 = 结束ID - 起始ID + 1
        result->current_page_items = page_end_id - page_start_id + 1;
    } else {
        // 无总数据量时，返回每页设定的数量
        result->current_page_items = per_page;
    }

    return true;
}