class AdminPermission < ApplicationRecord
  enum accounting: [:none, :read, :write, :manage], _prefix: true
  enum administration: [:none, :read, :write, :manage], _prefix: true
  enum admissions: [:none, :read, :write, :manage], _prefix: true
  enum auction: [:none, :read, :write, :manage], _prefix: true
  enum classroom: [:none, :read, :write, :manage], _prefix: true
  enum communications: [:none, :read, :write, :manage], _prefix: true
  enum courses: [:none, :read, :write, :manage], _prefix: true
  enum covid: [:none, :read, :write, :manage], _prefix: true
  enum discipline: [:none, :read, :write, :manage], _prefix: true
  enum facility: [:none, :read, :write, :manage], _prefix: true
  enum human_resources: [:none, :read, :write, :manage], _prefix: true
  enum library: [:none, :read, :write, :manage], _prefix: true
  enum nursing: [:none, :read, :write, :manage], _prefix: true
  enum pt_conference: [:none, :read, :write, :manage], _prefix: true
  enum service: [:none, :read, :write, :manage], _prefix: true
  enum state_reporting: [:none, :read, :write, :manage], _prefix: true
  enum students: [:none, :read, :write, :manage], _prefix: true
  enum financial_aid: [:none, :read, :write, :manage], _prefix: true

  NAMES = {
    accounting: 'Accounting',
    administration: 'Administration',
    admissions: 'Admissions',
    classroom: 'Classroom',
    communications: 'Communications',
    covid: 'COVID',
    discipline: 'Discipline',
    facility: 'Facility',
    human_resources: 'Human Resources',
    library: 'Library',
    nursing: 'Medical',
    pt_conference: 'PT Conference',
    service: 'Service',
    state_reporting: 'State Reporting',
    students: 'Students',
    financial_aid: 'Financial Aid'
  }

  belongs_to :user

  has_many :permission_users, through: :user

  after_initialize :sync_legacy_permissions

  before_save :save_legacy_permissions

  private
    def sync_legacy_permissions
      self.administration = permission_users.find_by(name: 'CoAdmin') ? :manage : :none
      self.discipline = permission_users.find_by(name: 'CoDiscipline') ? :manage : :none
    end

    def save_legacy_permissions
      if administration_manage?
        user.permission_users.find_or_create_by(name: 'CoAdmin')
      else
        permission_users.find_by(name: 'CoAdmin')&.destroy
      end

      if discipline_manage?
        user.permission_users.find_or_create_by(name: 'CoDiscipline')
      else
        permission_users.find_by(name: 'CoDiscipline')&.destroy
      end
    end
end
