require 'open-uri'
require 'lastfm'

class LastFmController < ApplicationController
  
  @@api_key = '04fda005dbf61a50af5abc3e90f111f2'
  @@secret = '19e70e98b291e9f15d0516925945eb1b'
  
  def connect
    unless params[:sid].nil? or params[:token].nil?
      session = Session.find_by_key(params[:sid])
      unless session.nil?
        lastfm = Lastfm.new(@@api_key, @@secret)
        lastfm.session = lastfm.auth.get_session(params[:token])
        session.user.lastfm_key = lastfm.session['key']
        session.user.lastfm_username = lastfm.session['name']
        session.user.save
        render :text => '<script>window.close();</script>'
      else
        render :text => 'You Don\'t Fool Me'
      end
    else
      render :text => 'So Much Trouble In The World'
    end
  end
  
  def getinfo
    return unless authorized?
    @res = {}
    
    user = User.find_by_vkid(params[:mid])
    unless user.lastfm_key.nil?
      render :json => {
        :connected => true,
        :username => user.lastfm_username
      }
    else
      render :json => {
        :connected => false,
        :lastfm_login_url => 'http://www.last.fm/api/auth?api_key='+ @@api_key +
          '&cb=http://'+ request.host << '/lastfm/connect/?sid='+ user.session.key
      }
    end
  end
  
  def listening
    return unless authorized?
    @res = {}
    
    if params[:artist].nil? or params[:album].nil? or params[:track].nil?
      render :json => {:status => 'bad params'}
      return
    end
    
    user = User.find_by_vkid(params[:mid])
    if user.lastfm_key.nil?
      render :json => {:status => 'lastfm account is not connected', :user => user}
      return
    end
    
    lastfm = Lastfm.new(@@api_key, @@secret)
    lastfm.session = user.lastfm_key
    r = lastfm.track.update_now_playing(params[:artist], params[:track])
    
    render :json => {:status => r ? 'success' : 'failed'}
    return
  end
  
  def scrobble
    return unless authorized?
    @res = {}
    
    if params[:artist].nil? or params[:album].nil? or params[:track].nil?
      render :json => {:status => 'bad params'}
      return
    end
    
    user = User.find_by_vkid(params[:mid])
    if user.lastfm_key.nil?
      render :json => {:status => 'lastfm account is not connected', :user => user}
      return
    end
    
    lastfm = Lastfm.new(@@api_key, @@secret)
    lastfm.session = user.lastfm_key
    r = lastfm.track.scrobble(params[:artist], params[:track], params[:album], Time.now.utc.to_i)
    
    render :json => {:status => r ? 'success' : 'failed', time: Time.now.utc}
    return
  end
  
  def self.api_key
    @@api_key
  end
  
end