class FacebookController < ApplicationController
  skip_before_filter :check_xhr, only: [:frame, :complete]
  layout false

  def frame
    redirect_to oauth_consumer.url_for_oauth_code(:permissions => "email")
  end

  def complete
    consumer = oauth_consumer
    token = consumer.get_access_token(params[:code])

    graph = Koala::Facebook::API.new(token)
    me = graph.get_object("me")

    email = me["email"]
    verified = me["verified"]

    name = me["name"]
    username = User.suggest_username(me["username"])

    verified = me["verified"]

    # non verified accounts are just trouble
    unless verified
      render text: "Your account must be verified with facebook, before authenticating with facebook"
      return
    end

    session[:authentication] = {
      facebook: {
        facebook_user_id: me["id"],
        link: me["link"],
        username: me["username"],
        first_name: me["first_name"],
        last_name: me["last_name"],
        email: me["email"],
        gender: me["gender"],
        name: me["name"]
      },
      email: me["email"],
      email_valid: true
    }

    user_info = FacebookUserInfo.where(:facebook_user_id => me["id"]).first

    @data = {
      username: username,
      name: name,
      email: email,
      auth_provider: "Facebook",
      email_valid: true
    }

    if user_info
      user = user_info.user
      if user
        unless user.active
          user.active = true
          user.save
        end
        log_on_user(user)
        @data[:authenticated] = true
      end
    else
      user = User.where(email: me["email"]).first
      if user
        FacebookUserInfo.create!(session[:authentication][:facebook].merge(user_id: user.id))
        unless user.active
          user.active = true
          user.save
        end
        log_on_user(user)
        @data[:authenticated] = true
      end
    end

  end


  protected

  def oauth_consumer
    require 'koala'

    host = request.host
    host = "#{host}:#{request.port}" if request.port != 80
    callback_url = "http://#{host}/facebook/complete"

    oauth = Koala::Facebook::OAuth.new(SiteSetting.facebook_app_id, SiteSetting.facebook_app_secret, callback_url)
  end

end