import groovy.util.XmlParser
import org.serviio.library.metadata.*
import org.serviio.library.online.*

 /********************************************************************
 * HDhomeRun plugin for Serviio
 * 

 * Version:
 *    V1: - Nov 18th, 2013 - Initial Release 
 *	  V2: - Nov 20th, 2013 - Allow channels with . 
 *	  V3: - Dec 7th, 2013 - Removed hardcoded IP and added channel number to the name 
 * Must be installed as a WebResource
 * Sample URLs: http://192.168.1.130/lineup.html
 
 ********************************************************************/
  


class HDHR extends WebResourceUrlExtractor {
    
    final VALID_FEED_URL = '^(http://)(.*?)/lineup.html'

	
   	int getVersion() {
		return 3
	}
	
	int getExtractItemsTimeout(){
		return 30
	}
	
	WebResourceContainer errorHandlerWRC(String e){
		List<WebResourceItem> items = []
		println e
		log(e)
		items <<  new WebResourceItem(title: e, additionalInfo: ['url':'http://error','thumbnailUrl':'http://fake.jpg'])
		WebResourceContainer wrc = new WebResourceContainer(title: "Error", items: items)
		return wrc
	}
	
	void errorHandler(String e){
		println e
		log(e)
		return 
	}

    String getExtractorName() {
        return 'HDHomeRun'
    }
    
    boolean extractorMatches(URL feedUrl) {
        return feedUrl ==~ VALID_FEED_URL
    }
       
    WebResourceContainer extractItems(URL resourceUrl, int maxItemsToRetrieve) {

        List<WebResourceItem> items = []
		Date releaseDate
	    def json


		
        def pageContent = resourceUrl.getText()
		
		def jsMatcher = pageContent =~ "HDHomeRun Lineup" 
		
		if (jsMatcher.count <= 0) {
           return errorHandlerWRC("HDHR: Channel lineup not found")

		}
		


        def showTitle = "HDHomeRun"
		
		//V2
		//jsMatcher = pageContent =~ "<tr><td>(.[0-9]{1,4})</td><td>(.*)</td></tr>"
		jsMatcher = pageContent =~ "<tr><td>(.*)</td><td>(.*)</td></tr>"
		
		//V3
		def jsMatcherLink = resourceUrl=~ "^(http://)(.*?)/lineup.html"


		
		for  (i in 0..<jsMatcher.count){
		//println jsMatcher[i][2]
		if (jsMatcher[i][2] != "Unknown") {
			Map<String,String> additionalInfo = new HashMap<String, String>();
		
			//thumbnailUrl=
			//correction on V3
			additionalInfo.put("url","http://${jsMatcherLink[0][2]}:5004/auto/v${jsMatcher[i][1]}")
			//additionalInfo.put("thumbnailUrl",)
		
		
			items << new WebResourceItem(title: "${jsMatcher[i][1]}-${jsMatcher[i][2]}",additionalInfo: additionalInfo)
		}
		}

        return new WebResourceContainer(title: showTitle, items: items)
    }

    ContentURLContainer extractUrl(WebResourceItem item, PreferredQuality requestedQuality) {
		return new ContentURLContainer(contentUrl: item.additionalInfo.url, expiresImmediately: false,live: true) 
    }
    
    static void main(args) {
        HDHR extractor = new  HDHR() 

        WebResourceContainer container = extractor.extractItems( new URL("http://192.168.1.130/lineup.html"), 5)
		
		if ( container ){
		
        container.getItems().each {
            ContentURLContainer result = extractor.extractUrl(it, PreferredQuality.MEDIUM)
            println result 
		}
        }   
    }
}