class Decidim::Meetings::Admin::Permissions

def agenda

def agenda
  @agenda ||= context.fetch(:agenda, nil)
end

def allowed_agenda_action?

def allowed_agenda_action?
  return unless permission_action.subject == :agenda
  case permission_action.action
  when :create
    toggle_allow(meeting.present?)
  when :update
    toggle_allow(agenda.present? && meeting.present?)
  end
end

def allowed_meeting_action?

def allowed_meeting_action?
  return unless permission_action.subject == :meeting
  return disallow! if meeting && !meeting.official?
  case permission_action.action
  when :close, :copy, :destroy, :export_registrations, :update, :read_invites
    toggle_allow(meeting.present?)
  when :invite_attendee
    toggle_allow(meeting.present? && meeting.registrations_enabled?)
  when :create
    allow!
  end
end

def allowed_minutes_action?

def allowed_minutes_action?
  return unless permission_action.subject == :minutes
  case permission_action.action
  when :create
    toggle_allow(meeting.present?)
  when :update
    toggle_allow(minutes.present? && meeting.present?)
  end
end

def allowed_registration_form_action?

def allowed_registration_form_action?
  return unless permission_action.subject == :questionnaire
  case permission_action.action
  when :update
    toggle_allow(registration_form.present?)
  end
end

def meeting

def meeting
  @meeting ||= context.fetch(:meeting, nil)
end

def minutes

def minutes
  @minutes ||= context.fetch(:minutes, nil)
end

def permissions

def permissions
  return permission_action unless user
  return permission_action unless permission_action.scope == :admin
  allowed_registration_form_action?
  allowed_meeting_action?
  allowed_agenda_action?
  allowed_minutes_action?
  permission_action
end

def registration_form

def registration_form
  @registration_form ||= context.fetch(:questionnaire, nil)
end