class Vkontakte
	
	qr: null
	api_id: null
	
	constructor: (@api_id) ->
	
	getApiId: ->
		@api_id
	
	init: ->
		@qr = []
		
		window.vkAsyncInit = ->
			VK.init apiId: _vkontakte.getApiId()
			VK.Auth.getLoginStatus _vkontakte.authInfo


		setTimeout ->
			$('#vk_api_transport').append('<script async="async" src="http://vkontakte.ru/js/api/openapi.js"></script>')
		, 0
	
	authInfo: (response) ->
		if typeof response isnt 'undefined' and response.session			
			_session = new Session(response.session)

			$('#vk_login, .auth_notice').hide()
			$('#vk_logout').css display: 'block'
			
			$('#search_field').focus() if $('#search_field').length > 0
				
			_session.query '/user/auth', {}, (ar) ->
				if ar.newbie
					VK.Api.call 'getVariable', key: 1281, (r) ->
						_session.query '/user/update', name: r.response, (ar2) ->
							_session.setUser ar2.user
							$('.header-container .hello .greating')
								.html 'Tēnā koe, <span class="settings">' +(if _session.getUser().name then _session.getUser().name else '%username%')+ '</span>!'
				else
					_session.setUser ar.user
				
				$('.header-container .hello').show()
				$('.header-container .hello .greating')
					.html 'Tēnā koe, <span class="settings">' +(if _session.getUser().name then _session.getUser().name else '%username%')+ '</span>!'
		else
			_session = new Session({})
			_session.setUser {}
			$('#vk_login, .auth_notice').css display: 'block'
			$('.header-container .hello').hide()
		window._session = _session
	
	loadTracksData: (artist, track, duration, callback) ->
		track_prepared = track.replace(/\(.*\)/i, '').split('/')[0];
		query = artist+' '+track_prepared;
		if url = _vkontakte.getQR query
			callback url
		else
			VK.Api.call 'audio.search', q: query, (r) ->
				r.response.splice 0, 1
				url = _vkontakte.matchPerfectResult r.response, artist, track, duration
				_vkontakte.addQR query, url
				callback url
	
	matchPerfectResult: (data, artist, track, duration) ->
		duration = duration.split ':'

		duration = parseInt(duration[0], 10) * 60 + parseInt(duration[1], 10)
		best_score = 0;
		best_result = null;
		for item in data
			score = 0;
			item.artist = item.artist.trim();
			item.title = item.title.trim();
			
			if item.artist == artist
				score += 10
			else if item.artist.split(artist).length is 2
				score += 5
			else if item.title.split(artist).length is 2
				score += 4
			
			if item.title == track
				score += 10
			else if item.title.split(track).length is 2
				score += 5
			
			if parseInt(item.duration, 10) == duration
				score += 15
			else
				delta = Math.abs parseInt(item.duration, 10) - duration
				score += (10 - delta) if delta < 10
			
			if score > best_score
				best_score = score
				best_result = item
			
			if score is 35
				return best_result.url

		return best_result.url
	
	addQR: (query, url) ->
		@qr[query] = url;
	
	getQR: (query) ->
		if @qr[query]?
			@qr[query]
		false

$('#vk_login').live 'click', ->
	VK.Auth.login (response) ->
		_vkontakte.authInfo(response)
		false
	, 8
	false
$('#vk_logout').live 'click', ->
	_ajax.go '/search/';
	VK.Auth.logout _vkontakte.authInfo
	false