# -*- encoding : utf-8 -*-

module KirguduBase
	module Models
		module BasicProperties
			module CreatedBy
				def self.included(base)
					base.belongs_to :creator, class_name: ::KirguduBase::Security::User, foreign_key: :created_by
					base.scope :by_creator, lambda { |value| base.where(created_by: value) if value }

					base.class_eval do
						include InstanceMethods
					end
				end

				module InstanceMethods
					def creator_name
						creator.full_name if creator
					end
				end
			end

			module UpdatedBy
				def self.included(base)
					base.belongs_to :updater, class_name: ::KirguduBase::Security::User, foreign_key: :updated_by
					base.scope :by_updater, lambda { |value| base.where(updated_by: value) if value }

					base.class_eval do
						include InstanceMethods
					end
				end

				module InstanceMethods
					def updater_name
						updater.full_name if updater
					end
				end
			end

			module OwnedBy
				def self.included(base)
					base.belongs_to :owner, class_name: ::KirguduBase::Security::User, foreign_key: :owned_by
					base.scope :by_owner, lambda { |value| base.where(owned_by: value) if value }

					base.class_eval do
						include InstanceMethods
					end
				end

				module InstanceMethods
					def owner_name
						owner.full_name if owner
					end
				end
			end

			module ManagedBy
				def self.included(base)
					base.belongs_to :manager, class_name: ::KirguduBase::Security::User, foreign_key: :managed_by
					base.scope :by_manager, lambda { |value| base.where(managed_by: value) if value }

					base.class_eval do
						include InstanceMethods
					end
				end

				module InstanceMethods
					def manager_name
						manager.full_name if manager
					end
				end
			end

			module AdministratedBy
				def self.included(base)
					base.belongs_to :administrator, class_name: ::KirguduBase::Security::User, foreign_key: :administrated_by
					base.scope :by_administrator, lambda { |value| base.where(administrated_by: value) if value }

					base.class_eval do
						include InstanceMethods
					end
				end

				module InstanceMethods
					def administrator_name
						administrator.full_name if administrator
					end
				end
			end

			module User
				def self.included(base)
					base.belongs_to :user, class_name: ::KirguduBase::Security::User, foreign_key: :user_id
					base.scope :by_user, lambda { |value| base.where(user_id: value) if value }

					base.class_eval do
						include InstanceMethods
					end
				end

				module InstanceMethods
					def user_name
						user.full_name if user
					end
				end
			end

			module Portal
				def self.included(base)
					base.belongs_to :portal, class_name: ::KirguduBase::Common::Portal, foreign_key: :portal_id
					base.scope :by_portal, lambda { |value| base.where(portal_id: value) if value }

					base.class_eval do
						include InstanceMethods
					end
				end

				module InstanceMethods
					def portal_name
						portal.name if portal
					end
				end
			end

			module PortalUser
				def self.included(base)
					base.belongs_to :portal_user, class_name: ::KirguduBase::Common::PortalUser, foreign_key: :portal_user_id
					base.scope :by_portal_user, lambda { |value| base.where(portal_user_id: value) if value }

					base.class_eval do
						include InstanceMethods
					end
				end

				module InstanceMethods
					def portal_user_name
						portal_user.full_name if portal_user
					end
				end
			end

		end
	end
end