class PpaParticipativo::Cidadao < ApplicationRecord
	has_paper_trail

	# Include default devise modules. Others available are:
	# :lockable, :timeoutable
	devise :database_authenticatable, :registerable, :confirmable,
	:recoverable, :rememberable, :trackable, :validatable, :omniauthable, :omniauth_providers => [:facebook]

	attr_default :aceitou_os_termos_de_uso, false

	has_many :propostas, class_name: 'Ppa::Proposta', dependent: :destroy
	has_many :votos_das_propostas, class_name: 'Ppa::VotoDaProposta', dependent: :destroy

	validates_uniqueness_of :cpf_cnpj, scope: :email, unless: Proc.new { provider.present? }

	validates_presence_of :nome
	validates_presence_of :cpf_cnpj, :on => :create, unless: Proc.new { provider.present? }
	validates_presence_of :cpf_cnpj, :on => :update

	validates_cpf_or_cnpj :cpf_cnpj, :on => :create, unless: Proc.new { provider.present? }
	validates_cpf_or_cnpj :cpf_cnpj, :on => :update

	scope :participantes, -> {
		(self.joins(:propostas).distinct + self.joins(:votos_das_propostas).distinct).uniq
	}

	def send_devise_notification(notification, *args)
		Thread.new do
			devise_mailer.send(notification, self, *args).deliver_now unless Rails.env.development? || Rails.env.test?
		end
	end

	def self.from_omniauth(auth)
		where(provider: auth.provider, uid: auth.uid).first_or_initialize do |cidadao|
			cidadao.email = auth.info.email
			cidadao.password = Devise.friendly_token[0,20]
			cidadao.nome = auth.info.name
			cidadao.skip_confirmation!
			cidadao.save
		end
	end

	def self.new_with_session(params, session)
		super.tap do |cidadao|
			if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
				cidadao.email = data["email"] if cidadao.email.blank?
				cidadao.nome = data["name"] if cidadao.nome.blank?
				cidadao.provider = "facebook" if cidadao.provider.blank?
				cidadao.uid = data["id"] if cidadao.uid.blank?
			end
		end
	end

	def cpf_cnpj_formatado
		cpf = Cpf.new(cpf_cnpj)
		cnpj = Cnpj.new(cpf_cnpj)
		if cpf.valido?
			return cpf
		elsif cnpj.valido?
			return cnpj
		else
			if cpf_cnpj.blank? || provider == "facebook"
				return "(Autenticado via Facebook)"
			end
		end
	end
end
