/**
 * Referral Tracking Settings Model
 * Per-company configuration for referral tracking defaults, rewards, and behaviour.
 */

import mongoose, { Schema, Document } from 'mongoose';

// ============================================
// TYPE DEFINITIONS
// ============================================

export interface IReferralTrackingSettings extends Document {
  companyId: string;
  defaultReferrerReward: {
    type: string;
    value: number;
    valueType: string;
    description?: string;
  };
  defaultRefereeReward: {
    type: string;
    value: number;
    valueType: string;
    description?: string;
  };
  referralCodePrefix: string;
  referralLinkBaseUrl: string;
  autoApprove: boolean;
  requireEmailVerification: boolean;
  reminderFrequencyDays: number;
  maxReminders: number;
  expiryDays: number;
  notifications: {
    onRegistration: boolean;
    onSubscriptionPurchase: boolean;
    onRewardEarned: boolean;
  };
  createdAt: Date;
  updatedAt: Date;
}

// ============================================
// SCHEMA
// ============================================

const ReferralTrackingSettingsSchema = new Schema<IReferralTrackingSettings>(
  {
    companyId: { type: String, required: true, unique: true, index: true },
    defaultReferrerReward: {
      type: { type: String, default: 'credit' },
      value: { type: Number, default: 50 },
      valueType: { type: String, enum: ['percentage', 'fixed', 'points'], default: 'fixed' },
      description: String,
    },
    defaultRefereeReward: {
      type: { type: String, default: 'discount' },
      value: { type: Number, default: 10 },
      valueType: { type: String, enum: ['percentage', 'fixed', 'points'], default: 'percentage' },
      description: String,
    },
    referralCodePrefix: { type: String, default: 'REF', uppercase: true, maxlength: 10 },
    referralLinkBaseUrl: { type: String, default: '' },
    autoApprove: { type: Boolean, default: true },
    requireEmailVerification: { type: Boolean, default: true },
    reminderFrequencyDays: { type: Number, default: 7, min: 1, max: 30 },
    maxReminders: { type: Number, default: 3, min: 0, max: 10 },
    expiryDays: { type: Number, default: 30, min: 1, max: 365 },
    notifications: {
      onRegistration: { type: Boolean, default: true },
      onSubscriptionPurchase: { type: Boolean, default: true },
      onRewardEarned: { type: Boolean, default: true },
    },
  },
  {
    timestamps: true,
    collection: 'referralTrackingSettings',
  }
);

// ============================================
// EXPORT
// ============================================

const ReferralTrackingSettings =
  (mongoose.models.ReferralTrackingSettings as mongoose.Model<IReferralTrackingSettings>) ||
  mongoose.model<IReferralTrackingSettings>('ReferralTrackingSettings', ReferralTrackingSettingsSchema);

export { ReferralTrackingSettings };