class User {
  constructor(data) {
    this.id = data.id;
    this.email = data.email;
    this.name = data.name;
    this.password = data.password;
    this.role = data.role || 'user';
    this.createdAt = data.createdAt;
    this.updatedAt = data.updatedAt;
  }

  /**
   * Ellenőrzi, hogy a user admin-e
   */
  isAdmin() {
    return this.role === 'admin';
  }

  /**
   * Ellenőrzi, hogy a user szerkeszthet-e egy másik usert
   * @param {User} targetUser - A szerkeszteni kívánt user
   */
  canEdit(targetUser) {
    return this.isAdmin() || this.id === targetUser.id;
  }

  /**
   * User adatok validálása
   */
  validate() {
    if (!this.email || !this.name || !this.password) {
      throw new Error('Email, name és password kötelező');
    }
    
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    if (!emailRegex.test(this.email)) {
      throw new Error('Hibás email formátum');
    }
    
    if (this.password.length < 6) {
      throw new Error('Jelszó min. 6 karakter');
    }

    return true;
  }

  /**
   * User objektum JSON-ként (jelszó nélkül!)
   */
  toJSON() {
    const { password, ...userWithoutPassword } = this;
    return userWithoutPassword;
  }
}

module.exports = User;
