/**
 * Module Name: soundcloud
 * Description: Various SoundCloud functionality
 */
var _ = require('underscore')._,
    request = require('request');

var soundcloud = function(dbot) {
    this.ApiRoot = 'http://api.soundcloud.com';

    this.commands = {
        '~soundcloud': function(event) {
            var query = event.input[1];
            request.get(this.ApiRoot + '/tracks.json', {
                'qs': {
                    'client_id': this.config.client_id,
                    'q': query
                },
                'json': true
            }, function(error, response, body) {
                if(body.length != 0) {
                    body = body[0];
                    if(!body.genre) body.genre = '';
                    event.reply(dbot.t('sc_track', {
                        'title': body.title,
                        'artist': body.user.username,
                        'genre': body.genre.trim(),
                        'plays': body.playback_count,
                        'favs': body.favoritings_count
                    }) + ' — ' + body.permalink_url);
                } else {
                    event.reply(dbot.t('sc_notrack'));
                }
            });
        }
    };
    this.commands['~soundcloud'].regex = [/^soundcloud (.+)$/, 2];

    this.onLoad = function() {
        dbot.api.link.addHandler(this.name, 
            /https?:\/\/(www\.)?soundcloud\.com\//,
            function(match, name, callback) {
                var url = match.input;
                request.get(this.ApiRoot + '/resolve.json', {
                    'qs': {
                        'client_id': this.config.client_id,
                        'url': url
                    },
                    'json': true
                }, function(error, response, body) {
                    if(response.statusCode == 200) {
                        if(body.kind == 'track') {
                            if(!body.genre) body.genre = '';
                            callback(dbot.t('sc_track', {
                                'title': body.title,
                                'artist': body.user.username,
                                'genre': body.genre.trim(),
                                'plays': body.playback_count,
                                'favs': body.favoritings_count
                            }));
                       }
                    }
                });
            }.bind(this));
    }.bind(this);
};

exports.fetch = function(dbot) {
    return new soundcloud(dbot);
};