import { NextRequest, NextResponse } from 'next/server';
import { createJiraService } from '@/services/integrations/jira/jira';
import { userPreferencesService } from '@/services/core/user-preferences';
import { getServerSession } from 'next-auth';
import { authOptions } from '@/lib/auth';

/**
 * POST /api/jira/validate-project
 * Valide l'existence d'un projet Jira
 */
export async function POST(request: NextRequest) {
  try {
    const session = await getServerSession(authOptions);
    if (!session?.user?.id) {
      return NextResponse.json({ error: 'Non authentifié' }, { status: 401 });
    }

    const body = await request.json();
    const { projectKey } = body;

    if (!projectKey || typeof projectKey !== 'string') {
      return NextResponse.json(
        { error: 'projectKey est requis' },
        { status: 400 }
      );
    }

    // Récupérer la config Jira depuis la base de données
    const jiraConfig = await userPreferencesService.getJiraConfig(
      session.user.id
    );

    if (
      !jiraConfig.enabled ||
      !jiraConfig.baseUrl ||
      !jiraConfig.email ||
      !jiraConfig.apiToken
    ) {
      return NextResponse.json(
        {
          error:
            'Configuration Jira manquante. Configurez Jira dans les paramètres.',
        },
        { status: 400 }
      );
    }

    // Créer le service Jira
    const jiraService = createJiraService();
    if (!jiraService) {
      return NextResponse.json(
        {
          error:
            'Impossible de créer le service Jira. Vérifiez la configuration.',
        },
        { status: 500 }
      );
    }

    // Valider le projet
    const validation = await jiraService.validateProject(
      projectKey.trim().toUpperCase()
    );

    if (validation.exists) {
      return NextResponse.json({
        success: true,
        exists: true,
        projectName: validation.name,
        message: `Projet "${projectKey}" trouvé : ${validation.name}`,
      });
    } else {
      return NextResponse.json(
        {
          success: false,
          exists: false,
          error: validation.error,
          message: validation.error || `Projet "${projectKey}" introuvable`,
        },
        { status: 404 }
      );
    }
  } catch (error) {
    console.error('Erreur lors de la validation du projet Jira:', error);
    return NextResponse.json(
      {
        success: false,
        error: 'Erreur lors de la validation du projet',
        message: error instanceof Error ? error.message : 'Erreur inconnue',
      },
      { status: 500 }
    );
  }
}
