/**
 * Migrate Subscription Pricing
 *
 * Adds new pricing fields to existing SubscriptionPackage documents:
 * - pricingMode: 'manual' (preserves current behavior)
 * - quarterlyPrice, halfYearlyPrice, lifetimePrice: 0 (defaults)
 * - selectedPricingItemSlugs, selectedAddonSlugs: [] (empty)
 * - appliedRuleSlugs, appliedDiscountCodes: [] (empty)
 *
 * This is a safe, additive migration — it does NOT modify existing
 * monthlyPrice or yearlyPrice values.
 *
 * Can be run multiple times safely (idempotent).
 */

import { getModels } from '../models';

export async function migrateSubscriptionPricing(): Promise<void> {
  try {
    const models = getModels();

    if (!models.SubscriptionPackage) {
      console.warn('[Migration] SubscriptionPackage model not available, skipping pricing migration');
      return;
    }

    const result = await (models.SubscriptionPackage as any).updateMany(
      { pricingMode: { $exists: false } },
      {
        $set: {
          pricingMode: 'manual',
          quarterlyPrice: 0,
          halfYearlyPrice: 0,
          lifetimePrice: 0,
          selectedPricingItemSlugs: [],
          selectedAddonSlugs: [],
          appliedRuleSlugs: [],
          appliedDiscountCodes: [],
        },
      }
    );

    console.log(`[Migration] Subscription Pricing: ${result.modifiedCount} packages updated with pricingMode='manual' and new billing cycle defaults`);

    // Also ensure CompanySubscription billingCycle enum allows new values
    // (MongoDB doesn't enforce enum on existing docs, so this is just for awareness)
    if (models.CompanySubscription) {
      const subCount = await (models.CompanySubscription as any).countDocuments({});
      console.log(`[Migration] CompanySubscription: ${subCount} existing subscriptions (billingCycle enum expanded to include quarterly, half_yearly, lifetime)`);
    }

    // Also ensure Invoice billingCycle enum allows new values
    if (models.Invoice) {
      const invoiceCount = await (models.Invoice as any).countDocuments({});
      console.log(`[Migration] Invoice: ${invoiceCount} existing invoices (billingCycle enum expanded)`);
    }
  } catch (error) {
    console.error('[Migration] Error migrating subscription pricing:', error);
    // Don't throw — migration failure shouldn't crash the server
  }
}