# == Schema Information
#
# Table name: users
#
#  id                     :integer          not null, primary key
#  email                  :string(255)      default(""), not null
#  encrypted_password     :string(255)      default(""), not null
#  true_name              :string(255)
#  gender                 :integer          default("1"), not null
#  birthday               :datetime
#  tel                    :string(255)
#  mobile                 :string(255)
#  reset_password_token   :string(255)
#  reset_password_sent_at :datetime
#  remember_created_at    :datetime
#  sign_in_count          :integer          default("0"), not null
#  current_sign_in_at     :datetime
#  last_sign_in_at        :datetime
#  current_sign_in_ip     :string(255)
#  last_sign_in_ip        :string(255)
#  created_at             :datetime         not null
#  updated_at             :datetime         not null
#  device_id              :string(255)      default("000000"), not null
#  username               :string(255)      default("000000"), not null
#  avatar                 :string(255)
#  role_id                :integer
#  is_enabled             :boolean          default("1")
#
class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  mount_uploader :avatar, AvatarUploader

  belongs_to :client, optional: true
  belongs_to :role, optional: true

  def self.current
    Thread.current[:user]
  end

  def self.current=(user)
    Thread.current[:user] = user
  end

  def is_admin?
    self.username == "admin" || self.role&.name == '管理员'
  end

  # allow register with username, not email
  def email_required?
    false
  end

  def allowed?(permission)
    return true if is_admin?

    all_permissions = self.role&.permissions || []
    all_permissions.include?(permission.to_s)
  end

  def reset_password!
    self.password = "88888888"
    self.save!
  end

  def has_unsafe_password?
    valid_password?("88888888") || valid_password?("12345678") || valid_password?("11111111")
  end
end
