import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { HydratedDocument } from 'mongoose';

export enum PaymentGateway {
    STRIPE = 'stripe',
    RAZORPAY = 'razorpay'
}

export enum SubscriptionCheckoutType {
    IN_APP_CHECKOUT = 'in_app_checkout',
    OUTSIDE_APP_CHECKOUT = 'outside_app_checkout',
    ONE_TIME_CHECKOUT = 'one_time_checkout',
}

@Schema({
    timestamps: {
        createdAt: 'created_at',
        updatedAt: 'updated_at',
    },
})
export class Settings {
    @Prop({ type: String, enum: PaymentGateway, required: true, unique: true })
    payment_gateway: PaymentGateway;

    @Prop({ type: Number, default: 0, min: 0, max: 100 })
    vendor_commission_percentage: number; // Default commission percentage for vendors

    @Prop({ type: Number, default: 0, min: 0 })
    referral_amount: number; // Amount credited to user when their referral code is used

    @Prop({ type: Boolean, default: true })
    is_instant_referral_reward: boolean; // If true, reward immediately. If false, wait for order completion

    @Prop({ type: Number, default: 0, min: 0 })
    referral_required_orders: number; // Number of orders required to get referral reward (if not instant)

    @Prop({ type: Number, default: 30, min: 1 })
    referral_time_limit_days: number; // Days to complete required orders

    @Prop({ type: String, default: null })
    description: string;


    @Prop({ type: Number, default: 18 }) // tax in %
    tax: number; // Changed from tax:

    @Prop({ type: String, default: "USD" })
    currency: string;   

    @Prop({ type: String, default: "$" })
    currency_symbol: string;    
 
    @Prop({ type: String, enum: SubscriptionCheckoutType, default: SubscriptionCheckoutType.OUTSIDE_APP_CHECKOUT })
    subscription_checkout_type: SubscriptionCheckoutType; // In-app checkout or outside app checkout


    @Prop({ type: Boolean, default: false })
    in_app_purchased_enable: boolean;

    
    @Prop({ type: Number, default: +new Date() })
    created_at: number;

    @Prop({ type: Number, default: +new Date() })
    updated_at: number;
}

export type SettingsDocument = HydratedDocument<Settings>;
export const SettingsSchema = SchemaFactory.createForClass(Settings);
