const prisma = require('../database/prisma');
const IUserRepository = require('../../domain/interfaces/IUserRepository');

/**
 * UserRepository - Prisma implementáció
 * 
 * Ez az osztály implementálja az IUserRepository interfészt
 * és Prisma ORM-et használ az adatbázis műveletekhez.
 */
class UserRepository extends IUserRepository {
  /**
   * User létrehozása
   * @param {Object} userData - { email, name, password, role }
   * @returns {Promise<User>}
   */
  async create(userData) {
    return await prisma.user.create({ 
      data: userData 
    });
  }

  /**
   * User keresése ID alapján
   * @param {number} id
   * @returns {Promise<User|null>}
   */
  async findById(id) {
    return await prisma.user.findUnique({
      where: { id: parseInt(id) }
    });
  }

  /**
   * User keresése email alapján
   * @param {string} email
   * @returns {Promise<User|null>}
   */
  async findByEmail(email) {
    return await prisma.user.findUnique({
      where: { email }
    });
  }

  /**
   * Összes user lekérése
   * @returns {Promise<User[]>}
   */
  async findAll() {
    return await prisma.user.findMany({
      orderBy: { createdAt: 'desc' }
    });
  }

  /**
   * User frissítése
   * @param {number} id
   * @param {Object} userData - Frissítendő mezők
   * @returns {Promise<User>}
   */
  async update(id, userData) {
    return await prisma.user.update({
      where: { id: parseInt(id) },
      data: userData
    });
  }

  /**
   * User törlése
   * @param {number} id
   * @returns {Promise<User>}
   */
  async delete(id) {
    return await prisma.user.delete({
      where: { id: parseInt(id) }
    });
  }
}

module.exports = UserRepository;
