const passport = require('passport');

/**
 * OAuth Controller
 * Verwaltet OAuth-Logins
 */
class OAuthController {
  /**
   * Google OAuth initiieren
   * GET /api/auth/google
   */
  googleAuth(req, res, next) {
    passport.authenticate('google', { 
      scope: ['profile', 'email'],
      session: false 
    })(req, res, next);
  }

  /**
   * Google OAuth Callback
   * GET /api/auth/google/callback
   */
  googleCallback(req, res, next) {
    passport.authenticate('google', { 
      session: false,
      failureRedirect: `${process.env.FRONTEND_URL || 'http://localhost:5010'}/login?error=oauth_failed`
    }, (err, result) => {
      if (err || !result) {
        console.error('Google OAuth Fehler:', err);
        return res.redirect(`${process.env.FRONTEND_URL || 'http://localhost:5010'}/login?error=oauth_failed`);
      }

      // Redirect zum Frontend mit Token
      const frontendUrl = process.env.FRONTEND_URL || 'http://localhost:5010';
      res.redirect(`${frontendUrl}/oauth-callback?token=${result.token}`);
    })(req, res, next);
  }

  /**
   * OAuth-Identities für Benutzer abrufen
   * GET /api/auth/identities
   */
  async getIdentities(req, res) {
    try {
      const userId = req.user.userId;
      const oauthService = require('../services/OAuthService');
      
      const identities = await oauthService.getUserIdentities(userId);

      res.json({
        success: true,
        identities
      });
    } catch (error) {
      console.error('Fehler beim Abrufen der Identities:', error);
      
      res.status(500).json({
        success: false,
        error: 'Fehler beim Abrufen der OAuth-Verknüpfungen'
      });
    }
  }

  /**
   * OAuth-Provider entfernen
   * DELETE /api/auth/identity/:provider
   */
  async unlinkProvider(req, res) {
    try {
      const userId = req.user.userId;
      const { provider } = req.params;
      const oauthService = require('../services/OAuthService');

      const unlinked = await oauthService.unlinkProvider(userId, provider);

      if (unlinked) {
        res.json({
          success: true,
          message: `${provider} wurde erfolgreich entfernt`
        });
      } else {
        res.status(404).json({
          success: false,
          error: 'Verknüpfung nicht gefunden'
        });
      }
    } catch (error) {
      console.error('Fehler beim Entfernen der Identity:', error);
      
      res.status(500).json({
        success: false,
        error: error.message
      });
    }
  }
}

module.exports = new OAuthController();



