/**
 * Contract record generator.
 *
 * Produces Contract records with territories, currencies, royalty splits,
 * date ranges, and active/inactive status.
 */

import type { SeededRng } from '@/lib/mock-data/seed';
import type { Contract } from '@/lib/mock-data/types';

const TERRITORIES = [
  'US', 'UK', 'DE', 'FR', 'JP', 'BR', 'AU', 'CA', 'MX', 'ES', 'IT', 'KR',
  'NL', 'SE', 'NO', 'DK', 'CH', 'AT', 'PT', 'AR',
] as const;

const CURRENCIES = ['USD', 'EUR', 'GBP', 'JPY', 'BRL', 'AUD', 'CAD', 'MXN'] as const;

/**
 * Generate Contract records.
 *
 * @param rng   - Seeded PRNG instance
 * @param count - Number of contracts to generate (≥60 recommended)
 */
export function generateContracts(rng: SeededRng, count: number): Contract[] {
  const contracts: Contract[] = [];

  for (let i = 0; i < count; i++) {
    const id = `CTR-${String(i + 1).padStart(4, '0')}`;

    // Start date between Jan 2023 and Jun 2025
    const startDate = rng.randomDate(new Date('2023-01-01'), new Date('2025-06-30'));

    // Duration between 6 months and 5 years
    const durationMs = rng.randomInt(6, 60) * 30 * 24 * 60 * 60 * 1000;
    const endDate = new Date(startDate.getTime() + durationMs);

    // Active if end date is in the future (relative to Dec 2025)
    const now = new Date('2025-12-31');
    const status: Contract['status'] = endDate > now ? 'active' : 'inactive';

    contracts.push({
      id,
      territory: rng.pick(TERRITORIES),
      currency: rng.pick(CURRENCIES),
      royaltySplit: Math.round(rng.randomFloat(5, 95) * 10) / 10,
      startDate,
      endDate,
      status,
    });
  }

  return contracts;
}
