import org.serviio.library.metadata.*
import org.serviio.library.online.*
import org.serviio.util.*

class DesiStreams extends WebResourceUrlExtractor {

	final VALID_FEED_URL = 'http://www.eboundservices.com/istream/istream_demo.php'
	final TITLE = 'eboundservices'
//	final CHANNEL_LIST_EXTRACTOR = '<td><a href="(.*?)" Target=.*?><center><img src="(.*?)" width="100" height="70" alt="" /></a><br />(.*?)</center>'
	final CHANNEL_LIST_EXTRACTOR = '<a href="(.*?)"><img src="(.*?)" alt="" width="144"'
//<a href="http://www.eboundservices.com/istream/channel.php?app=tv&stream=newsone"><img src="http://www.eboundservices.com/images/newsone.jpg" alt="" width="144" height="144" /></a>
    final USER_AGENT = 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1'
	String getExtractorName() {
		return 'DesiStreams'
	} // end getExtractorName
	
	boolean extractorMatches(URL feedUrl) {
		return feedURL ==~ VALID_FEED_URL
	} // end extractorMatches
	
	Boolean URLExists(URL fileURL){
    	if(((HttpURLConnection) fileURL.openConnection()).getResponseCode() == 404){
    		return false
    	}
    		return true
    } // end URLExists
    
    String process_for_URL(String htmlText, String rgxMatcher, String baseURL) {       
        def return_val = '-NOTFOUND-'        
        def matcher = htmlText =~ rgxMatcher
        if (matcher.count > 0) {
            return_val = '-URL-' + baseURL + matcher[0][1]
        }     
		//return_val = '-URL-' + 'http://www.eboundservices.com:8888/iframe/iframe.php?app=tv&stream=newsone&screen=true'   
        return return_val
	} // end process_for_URL
		
    String processChannel(String channel_url) {
    
    	println "processChannel... Starting"
 
        def log_text = ''
        def error = '' 
           	
        if (!URLExists(new URL(channel_url))) {
            error = '-DEADLINK-'
            log_text = log_text + error
            print error
         //   write_to_log(log_text)
            println 'URL Does Not Exist'
            return error
        } //end if
        
    	println 'URL Exists...'
    	
    	def channel_src_text = new URL(channel_url).getText()
    	new File('2.txt').text = channel_src_text
    	
    	def channel_stream_url_text = channel_src_text            
        def url_found = 0          
        def loop = 0  
        def base_url = ''
        def current_url = channel_url //channel_src
        def rtmp_url = '' 
        
        while (url_found == 0) {
        
        	def returned_url = '-NOTFOUND-'
        	
        	if (returned_url == '-NOTFOUND-') { 
                		//returned_url = 'http://www.eboundservices.com:8888/iframe/iframe.php?app=tv&stream=newsone&screen=true' 
						returned_url = process_for_URL(
                    		channel_stream_url_text, 
                  		  'htt.*?eboundservices\\.com:8888/iframe/(.*?)"',
                  		  'http://www.eboundservices.com:8888/iframe/'
                		) 
				              
            } // end if
            		
            println 'Returned Url ... ' + returned_url
            		
            if (returned_url == '-NOTFOUND-') {
                error = '-NOTFOUND-'
              //  write_to_log(log_text)
                return error
            } // end if
            else if (returned_url.contains("-URL-")) {
            	returned_url = returned_url.replaceFirst("-URL-","")
            	current_url = returned_url
                if (!URLExists(new URL(current_url))) {
                    error = '-DEADLINK-'
                    log_text = log_text + error
                    print error
               //     write_to_log(log_text)
                    println '-DEADLINK-'
                    return error
                }
                
                println 'Current URL - ' + current_url
             //   channel_stream_url_text = new URL(current_url).getText()     
                channel_stream_url_text = openURL( new URL(current_url), USER_AGENT )
           
           		println 'CHANNEL_STREAM_URL_TEXT - ' + channel_stream_url_text
               // new File('3.txt').text = channel_stream_url_text
                
                println "User agent check..."
                url_found = 1
                
            } // end else if            
            			
        } // end while	
    	println "processChannel... Finished"
    	
    } // end processChannel
    
	WebResourceContainer extractItems(URL resourceURL, int maxItemsToRetrieve) {
		
		println "WebResourceContainer... Starting"

        List<WebResourceItem> items = []
        
        if (URLExists(resourceURL) == false) {
            write_to_log("Invalid Resource URL")
            println "URL Does not Exist"
            return null
        }   
        
        println "URL Exists..."
        
        def resource_text = resourceURL.getText()
        
        new File('1.txt').text = resource_text
        
        def channel_list_matcher = resource_text =~ CHANNEL_LIST_EXTRACTOR
        
        def channel_count = channel_list_matcher.count
        for (channel_number in 0..<1) { // change back to channel_count from 1
        
            def channel_url = channel_list_matcher[channel_number][1]
            def channel_image = channel_list_matcher[channel_number][2]
            def channel_title_matcher = (channel_url =~ 'stream=(.*)')
            def channel_title = ''
            
            channel_title_matcher.each { channel_title = channel_title_matcher[0][1] }
            
            println channel_url + channel_image + channel_title
            
            processChannel(channel_url)
            
        } // end for
        		
		println "WebResourceContainer... Finished"
		
	} // end WebResourceContainer

	ContentURLContainer extractUrl(WebResourceItem item, PreferredQuality requestedQuality) {
	
		println "ContentURLContainer... Starting"
		
		println "ContentURLContainer... Finished"
		
		items << new WebResourceItem(title: channel_title, additionalInfo: [channelURL: channel_url, thumbnailUrl: channel_image])
        
	    return new WebResourceContainer(title: TITLE, items: items)
		
	} // end ContentURLContainer
	
	static void main(args) {
        
        println "Main... Starting"
        
		DesiStreams extractor = new DesiStreams()
        
     	   WebResourceContainer container = extractor.extractItems( new URL("http://www.eboundservices.com/istream/istream_demo.php"), 50)
     	   /**/
        	container.getItems().each {
            	ContentURLContainer result = extractor.extractUrl(it, PreferredQuality.MEDIUM)
            	println result 
            	println ''
        	}
       	/**/ 
       	
       	println "Main... Finished"
       	                 
    	}
    	
} // end class