package com.dougmccune.muxmaster.api
{
    import flash.events.Event;
    import flash.events.EventDispatcher;
    
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.http.HTTPService;
    
    [Event(name="complete", type="flash.events.Event")]
    [Event(name="fault", type="mx.rpc.events.FaultEvent")]
    
    [Bindable]
    public class MuxPlaylist extends EventDispatcher
    {
        namespace ns = "http://www.w3.org/1999/xhtml";
        
        public var songs:Array;
        public var relatedUsers:Array;
        public var color:uint;
        public var totalDuration:Number;
        
        private var _user:String;
        
        public function get user():String {
            return _user;
        }
        
        public function set user(value:String):void {
            _user = value;
            load(_user);
        }
        
        private function load(user:String):void {
            var url:String = "http://" + user + ".muxtape.com";
            
            var loader:HTTPService = new HTTPService();
            loader.url = url;
            loader.resultFormat = HTTPService.RESULT_FORMAT_E4X;
            loader.addEventListener(ResultEvent.RESULT, resultHandler);
            loader.send();
        }
        
        private function resultHandler(event:ResultEvent):void {
            use namespace ns;

            var result:XML = event.result as XML;
            
            //means the playlist didn't exist, we got thrown back to the home page
            if(result.head.title == "Muxtape") {
                dispatchEvent(new FaultEvent(FaultEvent.FAULT));
                return;
            }
            
            var related:XMLList = result.body.div.div.div.ul.li.a;
            
            relatedUsers = [];
            for each(var userXML:XML in related) {
                relatedUsers.push(userXML.toString());
            }
            
            var styleInfo:String = result.head.style;
            color = parseInt(styleInfo.substring(styleInfo.indexOf(": #") + 3, styleInfo.indexOf("; }")), 16);
            
            var txt:String = result.toXMLString();
            txt = txt.substr(txt.indexOf("new Kettle(['") + 13);
            txt = txt.substring(0, txt.indexOf("']"));
            
            var hexIDs:Array = txt.split("','");
            
            txt = result.toXMLString();
            txt = txt.substr(txt.indexOf("'],['") + 5);
            txt = txt.substring(0, txt.indexOf("']);"));
            
            var awsKeys:Array = txt.split("','");
            
            var songs:XMLList = result.body.div.ul.li;
            
            var muxSongs:Array = [];
            
            totalDuration = 0;
            
            for(var i:int=0; i<songs.length(); i++) {
                var song:XML = songs[i];
                
                var muxSong:MuxSong = new MuxSong();
                muxSong.artist = song.div[0].split(" - ")[0];
                muxSong.track  = song.div[0].split(" - ")[1];
                
                var seconds:int = parseInt(song.div[1].strong.split(":")[1]);
                var minutes:int = parseInt(song.div[1].strong.split(":")[0]);
                muxSong.length = (minutes*60 + seconds) * 1000;
                
                var awsKey:String = awsKeys[i];
                awsKey = awsKey.replace(new RegExp("&amp;", "g"), "&");
                
                muxSong.url = "http://muxtape.s3.amazonaws.com/songs/" + hexIDs[i] + "?" + awsKey;
                muxSongs.push(muxSong);
                
                totalDuration += muxSong.length;
            }
            
            this.songs = muxSongs;
            
            dispatchEvent(new Event(Event.COMPLETE));
        }
    }
}