
import groovy.json.JsonSlurper
import org.serviio.library.metadata.*
import org.serviio.library.online.*
import org.serviio.util.*

/********************************************************************
 * einthusan plugin for Serviio
 *
 * @author 
 *
 * URL to use as video webresource: http://www.einthusan.com/movies/index.php?lang=tamil
 * URL to use as video webresource: http://www.einthusan.com/movies/index.php?lang=telugu
 * URL to use as video webresource: http://www.einthusan.com/movies/index.php?lang=hindi
 * URL to use as video webresource: http://www.einthusan.com/movies/index.php?lang=malayalam
 * http://www.einthusan.com/movies/index.php?lang=hindi&organize=Year&filtered=2012&org_type=Year
 * Version:
 *    V1: - Mar 09, 2013
 *
 ********************************************************************/
 
 class ein2012 extends WebResourceUrlExtractor {
 
	final VALID_RESOURCE_URL = '(.*?)www.einthusan.com(.*?)movies(.*?)index.php(.*?)lang=(.*?)organize=(.*?)filtered=(.*?)org_type=(.*?)'
	final TITLE = 'http://www.einthusan.com/movies/index.php?lang=hindi&organize=Year&filtered=2012&org_type=Year'
	final BASE_URL = ''


    final LINK_PAGE_EXTRACTOR = '&organize=Year&filtered=(.*?)&org_type=Year' //'<a href="?lang=hindi&organize=Year&filtered=2012&org_type=Year">(.*?)</a>'
	final MOVIE_PAGE_EXTRACTOR = '<div class="video-object-thumb"><a href="..(.*?)"'
	final CHANNEL_LINK_EXTRACTOR = "'hd-2': (.*?) 'file': '(.*?)'"
	final THUMB_LINK_EXTRACTOR = "lang=(.*?)&id=(.*?)'"
	final CHANNEL_TITLE_EXTRACTOR = "<title>(.*?) Movie Online HD DVD</title>"
	
	
	String getExtractorName() {
		return 'ein2012.groovy'
	}
	
	boolean extractorMatches(URL resourceURL) {
		def urlval = resourceURL.toString() =~ VALID_RESOURCE_URL
		if (urlval.count > 0)
		{
		    return true
		}
		else
		{
			return false
		}
	}
   
	/**/
	void write_to_log(
		String text
	) {
		log(TITLE + ' - ' + text)
	}
	/**/
	public int getVersion() {
		return 1
	}
	Boolean URLExists(URL fileURL){
		if(((HttpURLConnection) fileURL.openConnection()).getResponseCode() == 404){
			return false
		}
		return true
	}
	
	
	WebResourceContainer extractItems(URL resourceURL, int maxItemsToRetrieve) {
	
		List<WebResourceItem> items = []
		
		if (URLExists(resourceURL) == false) {
			write_to_log("Invalid Resource URL")
			return null
		}
		resourceURL = (resourceURL.toString() + "&organize=Year&filtered=2012&org_type=Year").toURL()
		def resource_text = openURL(resourceURL,
			"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.1"
			)
		
		resource_text = resource_text.replaceAll("\n","")
		resource_text = resource_text.replaceAll("\r","")
		
		def page_count_var = resource_text =~ LINK_PAGE_EXTRACTOR
		def page_count = page_count_var.count

		if (page_count > 10)
		  {
			  page_count = 10
		  }
		for (page_in in 1..page_count)
		{
			def resourceURL1 = (resourceURL.toString() + "&organize=Year&filtered=2012&org_type=Year"+ page_in).toURL()
			resource_text = openURL(resourceURL1,
				"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.1"
				)
			resource_text = resource_text.replaceAll("\n","")
			resource_text = resource_text.replaceAll("\r","")
			
			def movie_count_var = resource_text =~ MOVIE_PAGE_EXTRACTOR
			def movie_count = movie_count_var.count
	
			for (movie_in in 1..movie_count)
			{
				
				def resourceURL2 = ("http://www.einthusan.com/movies/index.php?lang=hindi&organize=Year&filtered=2012&org_type=Year" + movie_count_var[movie_in - 1][1].toString() ).toURL()
				resource_text = openURL(resourceURL2,
					"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.1"
					)
				resource_text = resource_text.replaceAll("\n","")
				resource_text = resource_text.replaceAll("\r","")
				def channel_link_matcher = resource_text =~ CHANNEL_LINK_EXTRACTOR
				def channel_title_matcher = resource_text =~ CHANNEL_TITLE_EXTRACTOR
				def thumb_link_matcher = resource_text =~ THUMB_LINK_EXTRACTOR
				def channel_count = channel_link_matcher.count
				def channel_url = channel_link_matcher[0][2]
				def channel_title = channel_title_matcher[0][1].substring(0,channel_title_matcher[0][1].lastIndexOf(" "))
				def channel_image = ""
				def channel_cache_key = channel_title
				items << new WebResourceItem(title: channel_title,
					additionalInfo: [channelURL: channel_url,
						thumbnailURL: channel_image,
						cacheKey: TITLE + '_' + channel_cache_key
					])
				
			}

		}

		return new WebResourceContainer(title: TITLE, items: items)
	}
	
	protected ContentURLContainer extractUrl(WebResourceItem webResourceItem, PreferredQuality preferredQuality) {
		if(log.isDebugEnabled()){
			log(String.format("Staring video URL extraction for %s",webResourceItem.getAdditionalInfo().get("videoPageURL")))
		}
		try{
			return new ContentURLContainer(contentUrl: webResourceItem.getAdditionalInfo().get("channelURL"),
				thumbnailUrl: webResourceItem.getAdditionalInfo().get("thumbnailURL"),
				expiresImmediately: false,
				cacheKey : webResourceItem.getAdditionalInfo().get("cacheKey"),
				live: false
				)
		}catch (IndexOutOfBoundsException e){
			log.error(String.format("%s , Filed to create resource item for URL: %s",getExtractorName(), webResourceItem.getAdditionalInfo().get("videoPageURL")), log.isDebugEnabled()? e:null)
		}
		return null
	}
	
	static void main(args) {

		def extractor = new einthusan()
		
		WebResourceContainer container = extractor.extractItems( new URL("http://www.einthusan.com/movies/index.php?lang=hindi&organize=Year&filtered=2012&org_type=Year"), 5)

		/**/
		container.getItems().each {
			ContentURLContainer result = extractor.extractUrl(it, PreferredQuality.HIGH)
			println result
		}
	   /**/
	}
 }
