import { Context, Dict, Session } from 'koishi';
import { Config } from './config';
import { UserData } from './types';
export declare class MembershipSystem {
    private ctx;
    private config;
    userData: Dict<UserData>;
    private cleanupTimerDispose;
    private reminderTimerDispose;
    private pointsRefreshTimerDispose;
    private lastPointsRefreshTime;
    constructor(ctx: Context, config: Config);
    private ensureImportDir;
    private registerDatabase;
    loadUserDataFromDB(): Promise<void>;
    saveLastPointsRefreshTime(): Promise<void>;
    syncUserToDB(userId: string): Promise<void>;
    saveUserData(): Promise<void>;
    /**
     * 计算预估消耗点数（基于 Opus 套餐）
     * 社区逆向工程的 NAI Anlas 估算公式
     */
    calculatePointsCost(params: {
        width: number;
        height: number;
        steps: number;
        smea?: boolean;
        smeaDyn?: boolean;
        strength?: number;
        isImg2Img?: boolean;
        preciseRefCount?: number;
    }): number;
    /**
     * 导演工具点数计算
     * 1024×1024 及以下（像素数 ≤ 1,048,576）：0 点数
     * 大于 1,048,576 像素时：点数 = 像素数 ÷ 50,000 - 1.8（结果向上）
     */
    calculateDirectorPointsCost(width: number, height: number, toolType?: string): number;
    /**
     * 预扣点数
     * @returns 实际扣除的点数，不足返回 -1
     */
    deductPoints(userId: string, amount: number): Promise<number>;
    /**
     * 退还点数
     */
    refundPoints(userId: string, amount: number): Promise<void>;
    /**
     * 获取用户当前点数
     */
    getPoints(userId: string): number;
    /**
     * 批量给所有用户加减点数
     */
    addPointsToAll(amount: number, membersOnly?: boolean): Promise<{
        count: number;
        message: string;
    }>;
    /**
     * 刷新点数（定期任务）
     */
    refreshPoints(): Promise<{
        count: number;
        message: string;
    }>;
    /**
     * 获取距离下次点数刷新的天数
     */
    getDaysUntilNextRefresh(): number;
    /**
     * 从 JSON 文件导入数据到数据库
     */
    importFromJson(filePath?: string): Promise<{
        success: number;
        failed: number;
        message: string;
    }>;
    private parseTimeToToday;
    private getDelayUntilTime;
    cleanupExpiredMembers(): Promise<void>;
    checkAndRemindExpiringMembers(): Promise<void>;
    private setupCleanupTask;
    private setupReminderTask;
    private setupPointsRefreshTask;
    addDaysToAllMembers(days: number): Promise<{
        success: boolean;
        count: number;
        message: string;
    }>;
    private ensureUserData;
    checkAndResetDailyUsage(userId: string): void;
    canUseDrawing(userId: string, session: Session): boolean | string;
    incrementUsage(userId: string, drawCount?: number): void;
    updateLastDrawTime(userId: string, time?: number): void;
}
