require 'rest-graph/core'

module RestGraph::FacebookUtil
  PERMISSIONS = %w[
    publish_stream
    create_event
    rsvp_event
    sms
    offline_access
    publish_checkins

    user_about_me             friends_about_me
    user_activities           friends_activities
    user_birthday             friends_birthday
    user_education_history    friends_education_history
    user_events               friends_events
    user_groups               friends_groups
    user_hometown             friends_hometown
    user_interests            friends_interests
    user_likes                friends_likes
    user_location             friends_location
    user_notes                friends_notes
    user_online_presence      friends_online_presence
    user_photo_video_tags     friends_photo_video_tags
    user_photos               friends_photos
    user_relationships        friends_relationships
    user_relationship_details friends_relationship_details
    user_religion_politics    friends_religion_politics
    user_status               friends_status
    user_videos               friends_videos
    user_website              friends_website
    user_work_history         friends_work_history
    email
    read_friendlists          manage_friendlists
    read_insights
    read_mailbox
    read_requests
    read_stream
    xmpp_login
    ads_management
    user_checkins             friends_checkins

    manage_pages
  ]

  USER_PERMISSIONS = PERMISSIONS.reject{|perm| perm.start_with?('friends_')}

  def fix_fql_multi result
    result.inject({}){ |r, i| r[i['name']] = i['fql_result_set']; r }
  end

  def fix_permissions result
    # Hash[] is for ruby 1.8.7
    result.first && Hash[result.first.select{ |k, v| v == 1 }].keys
  end

  def permissions uid, selected_permissions=PERMISSIONS
    fix_permissions(
      fql(permissions_fql(uid, selected_permissions), {}, :secret => true))
  end

  def user_permissions uid
    permissions(uid, USER_PERMISSIONS)
  end

  def permissions_fql uid, selected_permissions=PERMISSIONS
    sanitized_uid = uid.to_s.tr("'", '')
    selected      = selected_permissions.join(',')
    "SELECT #{selected} FROM permissions where uid = '#{sanitized_uid}'"
  end
end

RestGraph.send(:include, RestGraph::FacebookUtil)