import java.text.SimpleDateFormat

import org.serviio.library.metadata.*
import org.serviio.library.online.*
import org.serviio.util.*

/**
 * Content URL extractor plugin for vplay.ro
 *  
 * @author Cristian Serban 
 * @date 7 April 2012
 *
 */
class Vplay extends WebResourceUrlExtractor {
    
    final VALID_FEED_URL = '^http(s)*://vplay.ro/c/.*$'
  	
    String getExtractorName() {
        return 'vplay'
    }
    
    boolean extractorMatches(URL feedUrl) {
        return feedUrl ==~ VALID_FEED_URL
    }
    
    WebResourceContainer extractItems(URL resourceUrl, int maxItems) {
            log("extractItems: "+resourceUrl.toString() )
            // compute domain URL
            String rootURL=resourceUrl.toString()
            if (rootURL.endsWith("/"))
                rootURL=rootURL.substring(0,rootURL.length()-1)
            rootURL=rootURL.substring(0,rootURL.lastIndexOf("/")+1)
        
            rootURL="http://vplay.ro"
            String UA=getFFmpegUserAgent()

            // ensure logged in
            openURL(new URL("http://192.168.1.203:81/vplaylogin.php"),UA)
    
            // this will hold all available episodes
    
    
    
            List<WebResourceItem> Episodes = []

            println "getting movie page " + resourceUrl.toString()
            String moviepage= openURL(resourceUrl,UA,["PHPSESSID":"hocuspocus"])
// test logged in
            if (moviepage.indexOf("button type=\"submit\" name=\"\" value=\"Login\"")>0)
            {
                println "YOU NEED TO LOGIN FIRST!!!!!!"
                return
            }
            // get thumb
    
                String movie_title=getInBetween(moviepage,"<title>","</title>")
    
    //          movie_title=movie_title.substring(0,movie_title.indexOf("<"))
//            println "movie title "+ movie_title                                  
                                              
            moviepage=getInBetween(moviepage,"<ul id=\"tabs-ul\">","</ul>")
             //   println moviepage
    
//            println seasons
    int pos=moviepage.lastIndexOf("href=");
    for (int i=0; pos>0;i++)
    {
        def season_href=new URL(rootURL+moviepage.substring(pos+6,moviepage.indexOf("\"",pos+6)))
        println "season  "+ season_href
        
        pos=moviepage.lastIndexOf("href=",pos-1);
        
        // get season episodes
        String seasonpage=openURL(season_href,UA,["PHPSESSID":"hocuspocus"])
        //trim
        seasonpage=getInBetween(seasonpage,"<div id=\"tabs-content\">","</ul>")
        
        int eppos=seasonpage.lastIndexOf("href=")
        for (;eppos>0;)
        {
        def ep_href=seasonpage.substring(eppos+6,seasonpage.indexOf("\"",eppos+6))
        ep_href=new URL(rootURL+ep_href)
        println "ep_href: " + ep_href
        String ep_title =seasonpage.substring(eppos+31,seasonpage.indexOf("\"",eppos+31))
        println "ep_title: "+ep_title
        int thu_index=seasonpage.indexOf("url(",eppos)+4
        String ep_thumb=seasonpage.substring(thu_index,seasonpage.indexOf(")",thu_index))
        println "ep_thumb: "+ ep_thumb
                                              
        String ep_streamUrl=getMovieRealURL(ep_href)
        //println ep_streamUrl       
        //return
        
        WebResourceItem item = new WebResourceItem(title: ep_title,
                                                   additionalInfo: ['WebResourceItemThumbnailUrl': ep_thumb,
                                                                    'WebResourceItemUrl_LOW'     : ep_streamUrl,
                                                                    'WebResourceItemUrl_MEDIUM'  : ep_streamUrl,
                                                                    'WebResourceItemUrl_HIGH'    : ep_streamUrl,
                                                                    'WebResourceItemInfoUrl'     : ep_streamUrl])
        Episodes <<item
        
        log("Adding episode: " + ep_title + ": " + ep_streamUrl)
                
        eppos=seasonpage.lastIndexOf("href=",eppos-1)
        }
        
        //exit after last season
        pos=-1
        }
        
       
        return new WebResourceContainer(title: movie_title, items: Episodes) 

        }
        
    
        String getMovieRealURL(URL url)
        {
        // 1) just call GET /watch url
        openURL(url,getFFmpegUserAgent(),["PHPSESSID":"hocuspocus"])
        // 2) do POST to /play/dinosaur.do with params onLoad=%5Btype%20Function%5D&external=0&key=mae7ddu1   (52 bytes)
        String key=url.toString().substring(22)
        key=key.substring(0,key.length()-1)
        println "key is: " + key
        String streamurl=openURL(new URL("http://192.168.1.203:81/vplaypost.php?key="+key),getFFmpegUserAgent())
        println "returned streamURL: "+ streamurl
        streamurl=getInBetween(streamurl,"URL=","&")
        println "streamurl is: "+ streamurl
        return streamurl

        log("getMovieRealURL: "+url.toString() )
        
        }
                                             
        String getInBetween(String data,String start,String end)
        {
            String tmp=data.substring(data.indexOf(start)+start.length())
            return tmp.substring(0,tmp.indexOf(end))
        } 
    
           
	ContentURLContainer extractUrl(WebResourceItem item, PreferredQuality requestedQuality) {
        def videoWeburl=item.getAdditionalInfo()['WebResourceItemUrl_HIGH']
        log("extractIUrl: "+videoWeburl )
        log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>processing url for stream " +videoWeburl)
        //def streamUrl=getMovieRealURL(new URL(videoWeburl))
        def streamUrl=videoWeburl
        return new ContentURLContainer(fileType: MediaFileType.VIDEO, contentUrl: streamUrl, thumbnailUrl: item.getAdditionalInfo()['WebResourceItemThumbnailUrl'],expiresImmediately: false, cacheKey:videoWeburl,live:false)
	}
	

	
    static void main(args) {
        def TestUrl = new URL("http://vplay.ro/c/g59g2vrk/")

    Vplay extractor = new Vplay()
    println "PluginName : " + extractor.getExtractorName();
    println "TestMatch  : " + extractor.extractorMatches(TestUrl);
    WebResourceContainer container = extractor.extractItems(TestUrl, 20);
    }
}