#!/usr/bin/env node

import { Command } from 'commander';
import { DocumentationService } from './services/documentationService';
import { GitHubClient } from './github/githubClient';
import { JiraClient } from './jira/jiraClient';
import { FuelixClient } from './fuelix/fuelixClient';
import { loadConfig } from './config';
import * as fs from 'fs';
import * as path from 'path';

const program = new Command();

program
  .name('doc-automation')
  .description('CLI tool for autonomous documentation and ticket management')
  .version('1.0.0');

program
  .command('analyze')
  .description('Analyze a file and generate documentation')
  .argument('<file>', 'File to analyze')
  .action(async (file: string) => {
    try {
      const config = loadConfig();
      const content = fs.readFileSync(file, 'utf-8');
      const service = new DocumentationService(
        new GitHubClient(config.github.token),
        new JiraClient(config.jira.token),
        new FuelixClient()
      );
      const analysis = await service.analyzeChanges(content);
      console.log('Analysis:', analysis);
    } catch (error: any) {
      console.error('Error:', error.message || 'An unknown error occurred');
      process.exit(1);
    }
  });

program
  .command('create-pr')
  .description('Create a documentation PR')
  .argument('<file>', 'File to document')
  .action(async (file: string) => {
    try {
      const config = loadConfig();
      const content = fs.readFileSync(file, 'utf-8');
      const service = new DocumentationService(
        new GitHubClient(config.github.token),
        new JiraClient(config.jira.token),
        new FuelixClient()
      );
      const analysis = await service.analyzeChanges(content);
      const prUrl = await service.createDocumentationPR(analysis);
      console.log('PR created:', prUrl);
    } catch (error: any) {
      console.error('Error:', error.message || 'An unknown error occurred');
      process.exit(1);
    }
  });

interface TicketOptions {
  prUrl?: string;
}

program
  .command('create-ticket')
  .description('Create a Jira ticket')
  .argument('<file>', 'File to document')
  .option('-p, --pr-url <url>', 'Related PR URL')
  .action(async (file: string, options: TicketOptions) => {
    try {
      const config = loadConfig();
      const content = fs.readFileSync(file, 'utf-8');
      const service = new DocumentationService(
        new GitHubClient(config.github.token),
        new JiraClient(config.jira.token),
        new FuelixClient()
      );
      const analysis = await service.analyzeChanges(content);
      await service.createJiraBacklogItem(analysis, options.prUrl);
      console.log('Jira ticket created successfully');
    } catch (error: any) {
      console.error('Error:', error.message || 'An unknown error occurred');
      process.exit(1);
    }
  });

program.parse(); 