/**
 * Script to enable/disable 2FA for a user
 * Usage: npx tsx scripts/enable-2fa.ts <email> <method> [action]
 *   method: 'email' | 'sms' | 'authenticator'
 *   action: 'enable' (default) | 'disable'
 *
 * Examples:
 *   npx tsx scripts/enable-2fa.ts user@example.com email
 *   npx tsx scripts/enable-2fa.ts user@example.com sms
 *   npx tsx scripts/enable-2fa.ts user@example.com authenticator
 *   npx tsx scripts/enable-2fa.ts user@example.com email disable
 */

import { db, schema } from '../src/lib/db';
import { eq } from 'drizzle-orm';
import { generateTOTPSecret, enable2FA, disable2FA } from '../src/lib/2fa';

async function main() {
  const [email, method, action = 'enable'] = process.argv.slice(2);

  if (!email || !method) {
    console.error('Usage: npx tsx scripts/enable-2fa.ts <email> <method> [action]');
    console.error('  method: email | sms | authenticator');
    console.error('  action: enable (default) | disable');
    process.exit(1);
  }

  if (!['email', 'sms', 'authenticator'].includes(method)) {
    console.error('Invalid method. Must be: email, sms, or authenticator');
    process.exit(1);
  }

  // Find user
  const user = await db.query.users.findFirst({
    where: eq(schema.users.email, email),
  });

  if (!user) {
    console.error(`User not found: ${email}`);
    process.exit(1);
  }

  if (action === 'disable') {
    await disable2FA(user.id);
    console.log(`✓ 2FA disabled for ${email}`);
    process.exit(0);
  }

  let secret: string | undefined;
  let phoneNumber: string | undefined;

  if (method === 'authenticator') {
    const result = generateTOTPSecret();
    secret = result.secret;
    console.log('\n=== Authenticator App Setup ===');
    console.log('Secret (for manual entry):', secret);
    console.log('QR Code URL:', result.otpauthUrl);
    console.log('\nScan the QR code or enter the secret in your authenticator app');
    console.log('Then test with a generated code\n');
  }

  if (method === 'sms') {
    // For SMS, we need a phone number - use the one from user or set a test one
    phoneNumber = user.phoneNumber || '+1234567890';
    console.log(`Using phone number: ${phoneNumber}`);
  }

  await enable2FA(user.id, method as 'email' | 'sms' | 'authenticator', secret, phoneNumber);

  console.log(`✓ 2FA enabled for ${email} using ${method}`);
  console.log(`User ID: ${user.id}`);

  process.exit(0);
}

main().catch((error) => {
  console.error('Error:', error);
  process.exit(1);
});
