import * as readline from 'readline';
import { Command } from 'commander';
import chalk from 'chalk';
import { writeConfig } from '../config';

function prompt(rl: readline.Interface, question: string): Promise<string> {
  return new Promise((resolve) => {
    rl.question(question, (answer) => {
      resolve(answer.trim());
    });
  });
}

export function registerConfigure(program: Command): void {
  program
    .command('configure')
    .description('Configure the CLI with API URL and credentials')
    .action(async () => {
      const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout,
      });

      try {
        console.log(chalk.bold('SentryAgent CLI Configuration'));
        console.log(chalk.dim('─'.repeat(40)));

        const apiUrl = await prompt(
          rl,
          chalk.cyan('API URL') + ' (e.g. https://api.sentryagent.ai): ',
        );
        if (apiUrl === '') {
          console.error(chalk.red('API URL cannot be empty.'));
          process.exit(1);
        }

        const clientId = await prompt(rl, chalk.cyan('Client ID') + ': ');
        if (clientId === '') {
          console.error(chalk.red('Client ID cannot be empty.'));
          process.exit(1);
        }

        const clientSecret = await prompt(
          rl,
          chalk.cyan('Client Secret') + ': ',
        );
        if (clientSecret === '') {
          console.error(chalk.red('Client Secret cannot be empty.'));
          process.exit(1);
        }

        writeConfig({ apiUrl, clientId, clientSecret });

        console.log();
        console.log(
          chalk.green('✓') +
            ' Configuration saved to ~/.sentryagent/config.json',
        );
      } finally {
        rl.close();
      }
    });
}
