/**
 * Authentication Middleware
 * 
 * FELADAT: Implementáld az authentication middleware-t!
 * 
 * Ez a middleware felelős azért, hogy:
 * 1. Ellenőrizze a JWT tokent (cookie-ból vagy Authorization header-ből)
 * 2. Validálja a tokent
 * 3. Beállítsa a req.user objektumot a dekódolt token alapján
 * 4. Hiba esetén 401 Unauthorized választ küldjön
 * 
 * Példa használat:
 * router.get('/protected', authenticateToken, (req, res) => {
 *   res.json({ user: req.user });
 * });
 */
export function authenticateToken(req, res, next) {
  try {
    // TODO: Implementáld az authentication-t
    // 1. Olvasd ki a tokent a cookie-ból vagy Authorization header-ből
    // 2. Validáld a tokent jwt.verify()-val
    // 3. Állítsd be req.user-t a dekódolt token payload-jából
    // 4. Hívd meg a next()-et, hogy tovább menjen a request
    
    // Ideiglenes: mindig hiba, amíg nincs implementálva
    return res.status(401).json({
      success: false,
      error: 'Authentication middleware not implemented yet - this is your task!'
    });
  } catch (error) {
    return res.status(401).json({
      success: false,
      error: 'Invalid or expired token'
    });
  }
}

/**
 * Authorization Middleware - Role Check
 * 
 * FELADAT: Implementáld a role-based authorization middleware-t!
 * 
 * Ez a middleware ellenőrzi, hogy a bejelentkezett usernek van-e megfelelő role-ja.
 * 
 * Példa használat:
 * router.delete('/admin/users/:id', authenticateToken, requireRole(['ADMIN']), (req, res) => {
 *   // Csak ADMIN role-lal lehet törölni
 * });
 */
export function requireRole(allowedRoles) {
  return (req, res, next) => {
    try {
      // TODO: Implementáld a role check-et
      // 1. Ellenőrizd, hogy req.user létezik-e (authenticateToken után fut)
      // 2. Ellenőrizd, hogy req.user.role benne van-e az allowedRoles tömbben
      // 3. Ha nincs jogosultság, küldj 403 Forbidden választ
      // 4. Ha van jogosultság, hívd meg a next()-et
      
      return res.status(403).json({
        success: false,
        error: 'Authorization middleware not implemented yet - this is your task!'
      });
    } catch (error) {
      return res.status(403).json({
        success: false,
        error: 'Insufficient permissions'
      });
    }
  };
}

/**
 * Resource Owner Check
 * 
 * FELADAT: Implementáld a resource ownership ellenőrzést!
 * 
 * Ez a middleware ellenőrzi, hogy a user tulajdonosa-e az adott resource-nak.
 * Például: csak a blog szerzője módosíthatja/törölheti a blogot.
 * 
 * @param {Function} getResourceOwnerId - Függvény, ami visszaadja a resource owner ID-t
 * 
 * Példa használat:
 * router.put('/blogs/:id', 
 *   authenticateToken, 
 *   checkOwnership(async (req) => {
 *     const blog = await blogRepository.findById(req.params.id);
 *     return blog.authorId;
 *   }),
 *   (req, res) => { ... }
 * );
 */
export function checkOwnership(getResourceOwnerId) {
  return async (req, res, next) => {
    try {
      // TODO: Implementáld az ownership check-et
      // 1. Szerezd meg a resource owner ID-t a getResourceOwnerId függvénnyel
      // 2. Ellenőrizd, hogy req.user.id === ownerId VAGY req.user.role === 'ADMIN'
      // 3. Ha nem egyezik és nem admin, küldj 403 Forbidden választ
      // 4. Ha OK, hívd meg a next()-et
      
      return res.status(403).json({
        success: false,
        error: 'Ownership check middleware not implemented yet - this is your task!'
      });
    } catch (error) {
      return res.status(403).json({
        success: false,
        error: 'Access denied'
      });
    }
  };
}
