const UserRepository = require('../../../infrastructure/repositories/UserRepository');

class UpdateUserHandler {
  constructor() {
    this.userRepository = new UserRepository();
  }

  async handle(command) {
    // 1. User létezésének ellenőrzése
    const user = await this.userRepository.findById(command.id);
    if (!user) {
      throw new Error('User nem található');
    }

    // 2. Email egyediség ellenőrzése (ha változott)
    if (command.email && command.email !== user.email) {
      const existing = await this.userRepository.findByEmail(command.email);
      if (existing) {
        throw new Error('Email már használatban van');
      }
    }

    // 3. Frissítendő adatok összeállítása
    const updateData = {};
    if (command.email) updateData.email = command.email;
    if (command.name) updateData.name = command.name;
    if (command.role) updateData.role = command.role;

    // 4. Frissítés végrehajtása
    return await this.userRepository.update(command.id, updateData);
  }
}

module.exports = UpdateUserHandler;
