// ============================================================
// infrastructure/storage/sync-manager.ts — 数据同步控制
//
// 职责：
//   - 管理分页加载游标（每类数据拉到第几页）
//   - 判断是否需要"下一页"按钮
//   - "加载历史数据"按钮的逻辑入口
//
// 策略：
//   - 每次加载 100 条
//   - last_page * 100 < total_count 时显示"继续加载更多"
//   - 不自动拉取，完全由用户手动触发
// ============================================================

import { execute, queryOne } from '../core/db-core';
import type { SyncCursor, SyncDataType } from '../core/types';

const PAGE_SIZE = 100;

// ---------- API ----------

export function getPageSize(): number {
  return PAGE_SIZE;
}

export function getCursor(dataType: SyncDataType): SyncCursor | null {
  return queryOne<SyncCursor>(`SELECT * FROM sync_cursor WHERE data_type = ?`, [dataType]);
}

export function updateCursor(dataType: SyncDataType, lastPage: number, totalCount: number): void {
  execute(
    `INSERT OR REPLACE INTO sync_cursor (data_type, last_page, total_count, synced_at) VALUES (?, ?, ?, ?)`,
    [dataType, lastPage, totalCount, Date.now()],
  );
}

/** 判断是否还有更多数据可加载 */
export function hasMore(dataType: SyncDataType): boolean {
  const c = getCursor(dataType);
  if (!c) return true; // 从未加载过 → 显示按钮
  return c.last_page * PAGE_SIZE < c.total_count;
}

/** 下次应加载的页码 */
export function nextPage(dataType: SyncDataType): number {
  const c = getCursor(dataType);
  return c ? c.last_page + 1 : 1;
}

/** 已缓存的总条数 */
export function syncedCount(dataType: SyncDataType): number {
  const c = getCursor(dataType);
  return c ? Math.min(c.last_page * PAGE_SIZE, c.total_count) : 0;
}

/** 服务端返回的总数 */
export function totalCount(dataType: SyncDataType): number {
  const c = getCursor(dataType);
  return c?.total_count ?? 0;
}
