import mongoose from "mongoose";
import { SUBSCRIPTIONS_ERROR_TYPES } from "./subscriptions.constant";

// export type TAIModel = 'gpt-3.5' | 'gpt-4' | 'gpt-4o' | 'claude-haiku' | 'claude-opus' | 'claude-sonnet' | 'gemini-1.5-flash' | 'gpt-4.1-nano'
export type TAIModel = string;

// 'gpt-4.5',
// export const AI_MODEL_LIST: TAIModel[] = ['gpt-3.5', 'gpt-4', 'gpt-4o', 'claude-haiku', 'claude-opus', 'claude-sonnet', 'gemini-1.5-flash', 'gpt-4.1-nano'];

export interface ISubscription {
    _id: mongoose.Schema.Types.ObjectId;
    user: string | mongoose.Schema.Types.ObjectId;
    aiModel: TAIModel;
    plan: 'free' | 'beginer' | 'standard' | 'premium';
    type: null | 'monthly' | 'yearly';
    startDate: Date;
    endDate: Date | null;
    queryLimit: number;
    imageLimit: number;
    softImageLimit: number; // one time for free users
    fileLimit: number;
    status: 'active' | 'inactive' | 'suspended' | 'cancelled' | 'expired' | 'pending'
    lastResetDate?: Date;
    payMeSubscriptionId?: string;
    isCancelRequested?: boolean;


    // enabled features
    enabledImageGeneration: {
        gpt: boolean;
        claude: boolean;
        gemini: boolean;
    }

    enabledRealtimeSearch: {
        gpt: boolean;
        claude: boolean;
        gemini: boolean;
    }

    // Prompt Enhancer
    isPromptEnhancerEnabled: boolean;
    lastResetAt?: Date;

    // Limits for image generation
    imageGenerationLimits: {
        allModels: number;
        minimax: number;
        fluxSchnell: number;
    };
}


export type TSubscriptionError = keyof typeof SUBSCRIPTIONS_ERROR_TYPES