import org.serviio.library.metadata.*
import org.serviio.library.online.*

/**
 * SvtPlay.se content URL extractor plugin. 
 * 
 * http://feeds.svtplay.se/v1/video/list/96238?expression=full&mode=plain
 *
 * @version 1.1
 *  
 * @author Tomas Falemo
 *
 */
class SvtPlay extends FeedItemUrlExtractor {
    
    final VALID_FEED_URL = '^http(s)*://feeds.svtplay.se/.*$'   

    String getExtractorName() {
        return getClass().getName()
    }
    
    boolean extractorMatches(URL feedUrl) {
        return feedUrl ==~ VALID_FEED_URL
    }
    
    ContentURLContainer extractUrl(Map links, PreferredQuality requestedQuality) {
        def linkUrl = links.default
        def contentUrl

		def contentHtml
		def url = new URL(''+linkUrl)
		def connection = url.openConnection()
		if(connection.responseCode == 200){
			contentHtml = connection.content.text
		}
		else{
			return null
		}
		
		String[] priorityList
	    if(requestedQuality == PreferredQuality.HIGH){
			priorityList = ['e','d','c','b','a']
		}else{
			if(requestedQuality == PreferredQuality.MEDIUM){
				priorityList = ['c','b','d','a','e']
			}else{
				// LOW
				priorityList = ['a','b','c','d','e']
			}
		}	   
		contentUrl = GetBestMatch(contentHtml, priorityList)
		def thumbnail = GetThumbnail(contentHtml)
		//println thumbnail
        return new ContentURLContainer(fileType: MediaFileType.VIDEO, contentUrl: contentUrl, thumbnailUrl: thumbnail)
    }
    
    String GetThumbnail(String contentHtmlPage){
    //background=http://media.svt.se/download/mcc/kluster/20111017/PG-1144581-007A-FRAGADOKTORNHO-01_0_start_0.jpg
    	def matcher = (contentHtmlPage =~ '.*background=(http.*?\\.jpg|http.*?\\.png|http.*?\\.gif)')
		assert matcher != null
		if(matcher.size() > 0)
		{
			return matcher[0][1]
		}
    	return null
	}
    
    String GetBestMatch(String contentHtmlPage, String[] priority){
		String match = null
		
		// example of match: rtmp://fl11.c91005.cdn.qbrick.com/91005/_definst_/kluster/20110922/PG-1146034-001A-MITTINATUREN2-02-mp4-e-v1.mp4 
		//def matcher = (contentHtml =~ '.*url\\:(rtmp.*e-v1.*),bitrate\\:')
		//def matcher = (contentHtml =~ '.*url\\:(rtmp.*d-v1.*),bitrate\\:')
		//def matcher = (contentHtml =~ '.*url\\:(rtmp.*c-v1.*),bitrate\\:')
		//def matcher = (contentHtml =~ '.*url\\:(rtmp.*b-v1.*),bitrate\\:')
		priority.each{
			if(match == null){
				def matcher = (contentHtmlPage =~ '.*url\\:(rtmp.*'+it+'-v1.*?),bitrate\\:')
				assert matcher != null
				if(matcher.size() > 0)
				{
					match = matcher[0][1]
					//println 'match - ' + match
				}
			}
		}
		return match
    }
    
    static void main(args) {
		// this is just to test
        SvtPlay extractor = new SvtPlay()
		
		assert extractor.extractorMatches( new URL("http://feeds.svtplay.se/v1/video/list/96238?expression=full&mode=plain") )
		assert !extractor.extractorMatches( new URL("http://google.com/feeds/api/standardfeeds/top_rated?time=today") )
		
        Map links = ['default': new URL('http://svtplay.se/v/2424817/en_stund_med/en_stund_med_emanuel')] 
        ContentURLContainer result1 = extractor.extractUrl(links, PreferredQuality.LOW)
        ContentURLContainer result2 = extractor.extractUrl(links, PreferredQuality.MEDIUM)
        ContentURLContainer result3 = extractor.extractUrl(links, PreferredQuality.HIGH)
        println "Result low: $result1"
        println "Result medium: $result2"
        println "Result high: $result3"
    }
}