# == Schema Information
#
# Table name: organization_users
#
#  id              :integer          not null, primary key
#  user_id         :integer
#  organization_id :integer
#  is_creator      :boolean          default("0")
#  created_at      :datetime         not null
#  updated_at      :datetime         not null
#
# Indexes
#
#  index_organization_users_on_organization_id  (organization_id)
#  index_organization_users_on_user_id          (user_id)
#

class OrganizationUser < ApplicationRecord

  belongs_to :organization
  belongs_to :organization_extension, foreign_key: :organization_id, primary_key: :organization_id, counter_cache: :num_users
  belongs_to :user

  validates :user_id, uniqueness: {scope: :organization_id}

  after_create :send_create_message_to_notice_system
  after_destroy :send_destroy_message_to_notice_system

  def self.build(organization_id, user_id)
    org_user = self.find_by(organization_id: organization_id, user_id: user_id)
    return org_user unless org_user.nil?
    self.create!(organization_id: organization_id, user_id: user_id)
  end

  def teams
    organization.teams.joins(:team_users).where(team_users: {user_id: user_id})
  end

  def send_create_message_to_notice_system
    SendTemplateMessageJob.perform_later('OrganizationJoined', self.user_id, self.organization_id) if Site.has_notice_menu?
  end

  def send_destroy_message_to_notice_system 
    SendTemplateMessageJob.perform_later('OrganizationLeft', self.user_id, self.organization_id) if Site.has_notice_menu?
  end
end
