/**
 * AuthController
 * 
 * FELADAT: Implementáld az alábbi metódusokat!
 * 
 * Ez a controller felelős az authentication és authorization kezeléséért.
 * A következő funkciók implementálása szükséges:
 * 
 * 1. register() - Felhasználó regisztráció
 *    - Email és username uniqueness ellenőrzés
 *    - Jelszó hash-elés bcrypt-tel
 *    - User létrehozása a repository-n keresztül
 *    - JWT token generálás
 *    - Cookie beállítás
 * 
 * 2. login() - Bejelentkezés
 *    - User keresése email vagy username alapján
 *    - Jelszó ellenőrzés bcrypt.compare()-val
 *    - JWT token generálás (access és refresh token)
 *    - Cookie-k beállítása
 *    - Redis-ben session tárolás (opcionális)
 * 
 * 3. logout() - Kijelentkezés
 *    - Cookie-k törlése
 *    - Redis session törlése
 * 
 * 4. refreshToken() - Token frissítés
 *    - Refresh token validálás
 *    - Új access token generálás
 * 
 * 5. getCurrentUser() - Bejelentkezett user adatai
 *    - req.user alapján user visszaadása
 */
export class AuthController {
  constructor(userRepository) {
    this.userRepository = userRepository;
  }

  /**
   * POST /api/auth/register
   * Új felhasználó regisztrációja
   */
  async register(req, res) {
    try {
      // TODO: Implementáld a regisztrációt
      // 1. Validáld az input adatokat (email, username, password)
      // 2. Ellenőrizd, hogy létezik-e már a user (email vagy username)
      // 3. Hash-eld a jelszót bcrypt-tel
      // 4. Hozd létre a user-t a repository-n keresztül
      // 5. Generálj JWT tokent
      // 6. Állítsd be a cookie-kat
      // 7. Küldd vissza a user adatokat (jelszó nélkül!)
      
      res.status(501).json({
        success: false,
        error: 'Register not implemented yet - this is your task!'
      });
    } catch (error) {
      res.status(400).json({
        success: false,
        error: error.message
      });
    }
  }

  /**
   * POST /api/auth/login
   * Bejelentkezés
   */
  async login(req, res) {
    try {
      // TODO: Implementáld a login-t
      // 1. Keresd meg a user-t email vagy username alapján
      // 2. Ellenőrizd a jelszót bcrypt.compare()-val
      // 3. Generálj JWT access és refresh tokent
      // 4. Állítsd be a cookie-kat (httpOnly, secure)
      // 5. Opcionálisan tárolj session-t Redis-ben
      // 6. Küldd vissza a user adatokat és tokeneket
      
      res.status(501).json({
        success: false,
        error: 'Login not implemented yet - this is your task!'
      });
    } catch (error) {
      res.status(401).json({
        success: false,
        error: error.message
      });
    }
  }

  /**
   * POST /api/auth/logout
   * Kijelentkezés
   */
  async logout(req, res) {
    try {
      // TODO: Implementáld a logout-ot
      // 1. Töröld a cookie-kat
      // 2. Töröld a Redis session-t (ha van)
      // 3. Invalidáld a refresh tokent
      
      res.status(501).json({
        success: false,
        error: 'Logout not implemented yet - this is your task!'
      });
    } catch (error) {
      res.status(400).json({
        success: false,
        error: error.message
      });
    }
  }

  /**
   * POST /api/auth/refresh
   * Access token frissítése refresh token alapján
   */
  async refreshToken(req, res) {
    try {
      // TODO: Implementáld a token refresh-t
      // 1. Olvasd ki a refresh tokent a cookie-ból
      // 2. Validáld a refresh tokent
      // 3. Generálj új access tokent
      // 4. Állítsd be az új cookie-t
      
      res.status(501).json({
        success: false,
        error: 'Refresh token not implemented yet - this is your task!'
      });
    } catch (error) {
      res.status(401).json({
        success: false,
        error: error.message
      });
    }
  }

  /**
   * GET /api/auth/me
   * Bejelentkezett felhasználó adatai
   */
  async getCurrentUser(req, res) {
    try {
      // TODO: Implementáld a current user lekérést
      // 1. Olvasd ki a user-t req.user-ből (amit az auth middleware állít be)
      // 2. Küldd vissza a user publikus adatait
      
      res.status(501).json({
        success: false,
        error: 'Get current user not implemented yet - this is your task!'
      });
    } catch (error) {
      res.status(401).json({
        success: false,
        error: error.message
      });
    }
  }
}
