# -*- coding: utf-8 -*-

'''
    Genesis Add-on
    Copyright (C) 2015 lambda

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
'''

import re,urllib,urlparse,sys,unicodedata,base64

from resources.lib.libraries import cleantitle
from resources.lib.libraries import client
from resources.lib.resolvers import googleplus
from resources.lib.resolvers import openload
from resources.lib.libraries import cloudflare
from resources.lib.resolvers import up2stream
from resources.lib.resolvers import streamin
from resources.lib.resolvers import nowvideo
from resources.lib.resolvers import vodlocker


class source:    

    def __init__(self):
        print 'GenesisFR ; INIT'
        self.base_link = 'http://www.voirfilms.org'
        self.search_link = 'http://www.voirfilms.org'

    def get_movie(self, imdb, title, year):
        print ''

    def get_sources(self, url, hosthdDict, hostDict, locDict):
        
        print 'GenesisFR ; VOIRFILMS; GET_SOURCES'
        
        try :
            
            tempVOSTFR = None
            
            params = dict(urlparse.parse_qsl(sys.argv[2].replace('?','')))        

            try:
                name = params['name']
            except:
                name = None

            try:
                title = params['title']
            except:
                title = None

            try:
                year = params['year']
            except:
                year = None

            try:
                imdb = params['imdb']
            except:
                imdb = None

            title = title.lower()

            title_english = title

            url = 'http://www.imdb.com/title/%s' % imdb
            
            result = cloudflare.source(url, headers={'Accept-Language': 'fr-FR'})
            
            title = client.parseDOM(result, 'title')[0]
            title = re.compile('(.+?) [(]\d{4}[)]').findall(title)[0]
            title = title.lower()
            title = client.replaceHTMLCodes(title)
            title = title.encode('utf-8')

            aFlag = 0
            sources = []
            
        except :
            pass



        try :
            print 'GenesisFR ; VOIRFILMS'
            
            url = 'http://www.voirfilms.org/'
            
            #cookie = client.request(url, output='cookie')
            #post = 'action=login&login_name=ilovefrenchmovies&login_password=ilovefrenchmovies&Submit=&login=submit'
            #cookie = client.request(url, post=post, output='cookie')
            #result = client.request(url, cookie=cookie)
            
            j = 0

            #title = title.replace(' ', ' ')
            title_english= title_english.replace(' ', '%20')
            
            
            
            
            url ='http://www.voirfilms.org/rechercher'
            post = urllib.urlencode({'action': 'recherche', 'story': title})
            result = client.source(url, post=post)
            
            print '####   VOIRFILMS   ###### RESULT = %s' % result
            
            result2 = re.compile('mos_titre(.+?)/div> </a>', re.MULTILINE|re.DOTALL).findall(result)[0]
            url2 = re.compile('<a href=\"(.+?)\"', re.MULTILINE|re.DOTALL).findall(result2)[0]
            titre2 = re.compile('title=\"(.+?)film streaming', re.MULTILINE|re.DOTALL).findall(result2)[0]
            
            print '####   VOIRFILMS   ###### URL2 = %s' % url2
            print '####   VOIRFILMS   ###### TITRE2 = %s' % titre2


            '''
            while j <= len(result) :
    
                try :
                    video_id = re.compile('mov-title[\"]><a href=(.+?)h3>').findall(result)[j]
                    video_title = re.compile('>(.+?)<').findall(video_id)[0]
                    video_id = re.compile('mov-title[\"]><a href=["\"](.+?)["\"]').findall(result)[j]

                    video_title = video_title.replace(':', '')
                    video_title = video_title.replace('  ', ' ')
                    video_title = video_title.replace('   ', ' ')
                    video_title = video_title.replace('    ', ' ')
                    video_title = video_title.lower()
                    video_title = video_title.replace(' ', '%20')

                    title = title.replace(':', '')
                    title = title.replace('  ', ' ')
                    title = title.replace('   ', ' ')
                    title = title.replace('    ', ' ')
                    #title = title.replace(' ', '')


                    title = ud.name(unicode(title))
                    
                    

                    if (title.lower() in video_title.lower()) or (video_title.lower() in title.lower()) or (title_english.lower() in video_title.lower()) or (video_title.lower() in title_english.lower()) :
                        break
                    else :
                        j = j + 1
                        video_id = ''

                except :
                    break
            '''
            
            video_id = url2
            result = client.source(video_id)
            #print '####   VOIRFILMS   ###### RESULT = %s' % result
            
            result2 = re.compile('Liste liens(.+?)Veuillez patienter quelques secondes avant le chargement du Lecteur', re.MULTILINE|re.DOTALL).findall(result)[0]
            print '####   VOIRFILMS    ###### RESULT2 = %s' % result2

        except :
            pass



        try :
            print 'GenesisFR ; VOIRFILMS -> EASYWATCH'
            
            result = re.compile('http://easywatch.tv/embed-(.+?)[\'|\"]').findall(result2)[0]
            print '####   VOIRFILMS -> EASYWATCH   ###### RESULT = %s' % result
            result = client.source('http://easywatch.tv/embed-' + result)
            print '####   VOIRFILMS -> EASYWATCH   ###### RESULT = %s' % result
            
            video_id = re.compile('file:[\"](.+?)[\'|\"]').findall(result)[0]
            label_id = re.compile('label:[\"](.+?)[\'|\"]').findall(result)[0]
  
            url = video_id
            url = url.encode('utf-8')

            sources.append({'source': '(Fr) - Easywatch', 'quality': label_id, 'provider': 'Voirfilms', 'url': url})

            j = 1

            while j <= len(result) - 1 :
                video_id = re.compile('file:[\"](.+?)[\'|\"]').findall(result)[j]
                label_id = re.compile('label:[\"](.+?)[\'|\"]').findall(result)[j]

                url = video_id
                url = url.encode('utf-8')

                sources.append({'source': '(Fr) - Easywatch', 'quality': label_id, 'provider': 'Voirfilms', 'url': url})

                j = j + 1
            

            aFlag = 1

        except :
            pass
        


        try :
            print 'GenesisFR ; VOIRFILMS -> ALLVID'
            
            j = 0

            while j <= len(result) - 1 :

                result = re.compile('http://allvid.ch/embed-(.+?)[\'|\"]').findall(result2)[j]
                print '####   VOIRFILMS -> ALLVID   ###### RESULT = %s' % result
                result = client.source('http://allvid.ch/embed-' + result)
                print '####   VOIRFILMS -> ALLVID   ###### RESULT = %s' % result
    
                video_id0 = re.compile('\"><img src=\"http://(.+?)/').findall(result)[0]
                print '####   VOIRFILMS -> ALLVID   ###### video_id0  = %s' % video_id0
                video_id = re.compile('\\|mp4\\|(.+?)\\|sources\\|setup\\|').findall(result)[0]
                print '####   VOIRFILMS -> ALLVID   ###### video_id  = %s' % video_id
    
                url= 'http://' + video_id0 + video_id + '/v.mp4'
                print '####   VOIRFILMS -> ALLVID   ###### url  = %s' % url
    
                url = url.encode('utf-8')
    
                sources.append({'source': '(Fr) - Allvid', 'quality': 'HD', 'provider': 'Voirfilms', 'url': url})
    
                aFlag = 1
                
                j = j + 1
                
                if j > 10 :
                    break
                
        except :
            pass
        
        
        
        try :
            print 'GenesisFR ; VOIRFILMS -> EXASHARE'
            
            j = 0

            while j <= len(result2) - 1 :
                

                
                try:
                    result = re.compile('http://www.exashare.com/embed-(.+?)\"').findall(result2)[j]
                except:
                    break
                
                print '####   VOIRFILMS -> EXASHARE   ###### RESULT = %s' % result
                result = client.source('http://exashare.com/embed-' + result)
                print '####   VOIRFILMS -> EXASHARE   ###### RESULT = %s' % result
                
                result = re.compile('src=[\"](.+?)[\'|\"]').findall(result)[0]
                result = client.source(result)
                
                video_id = re.compile('file: [\"](.+?)[\'|\"]').findall(result)[0]
     
                url = video_id
                url = url.encode('utf-8')
                
                sources.append({'source': '(Fr) - Exashare', 'quality': 'SD', 'provider': 'Voirfilms', 'url': url})
    
                aFlag = 1
                
                j = j + 1
                
                if j > 10 :
                    break

        except :
            pass
        
        
        
        try :
            print 'GenesisFR ; VOIRFILMS -> UPTOSTREAM'
            
            j = 0

            while j <= len(result2) - 1 :
                
                try:
                    result = re.compile('https://uptostream.com/iframe/(.+?)\"').findall(result2)[j]
                except:
                    break
                    
                
                print '####   VOIRFILMS -> UPTOSTREAM   ###### RESULT = %s' % result
                result2a = 'https://uptostream.com/iframe/' + result
                print '####   VOIRFILMS -> UPTOSTREAM   ###### RESULT2a = %s' % result2a
                
                result = client.source(result2a)
                print '####   VOIRFILMS -> UPTOSTREAM   ###### RESULT = %s' % result
                video_id = re.compile('<source src=\'(.+?)\'').findall(result)[0]
                print '####   VOIRFILMS -> UPTOSTREAM   ###### video_id = %s' % video_id
    
                url = video_id
                url = url.encode('utf-8')
                
                sources.append({'source': '(Fr) - Uptostream', 'quality': 'SD', 'provider': 'Voirfilms', 'url': url})
    
                aFlag = 1
                
                j = j + 1
                
                if j > 10 :
                    break

        except :
            pass
        
        
        
        try :
            print 'GenesisFR ; VOIRFILMS -> YOUWATCH'
            
            j = 0

            while j <= len(result2) - 1 :
                
                try:
                    result = re.compile('http://youwatch.org/embed-(.+?)[\'|\"]').findall(result2)[j]
                except:
                    break
                
                print '####   VOIRFILMS -> YOUWATCH   ###### RESULT = %s' % result
                result = client.source('http://youwatch.org/embed-' + result)            
                print '####   VOIRFILMS -> YOUWATCH   ###### RESULT = %s' % result
                
                video_id = re.compile('src=[\"](.+?)[\'|\"]').findall(result)[0]
                result = client.source(video_id)
    
                video_info = re.compile('\\|provider\\|(.+?)\\|setup').findall(result)[0]
                video_info_split = video_info.split('|')
                
                video_type = video_info_split[0]
                video_name = video_info_split[1]
                video_ref = video_info_split[2]
                video_port = video_info_split[3]
                video_url_prefix = video_info_split[4]
                
                url = 'http://' + video_url_prefix + '.youwatch.org:' + video_port + '/' + video_ref + '/' + video_name + '.' + video_type
                url = url.encode('utf-8')
    
                sources.append({'source': '(Fr) - Youwatch', 'quality': 'SD', 'provider': 'Voirfilms', 'url': url})
    
                aFlag = 1
                
                j = j + 1
                
                if j > 10 :
                    break

        except :
            pass
        
        

        try :
            print 'GenesisFR ; VOIRFILMS -> SPEEDVIDEO'
        
            j = 0

            while j <= len(result2) - 1 :
                
                try:
                    result = re.compile('http://speedvideo.net/embed-(.+?)[\'|\"]').findall(result2)[j]
                    print '####   VOIRFILMS -> SPEEDVIDEO   ###### RESULT = %s' % result
                except:
                    pass
                    #if 'File was deleted' in result :
                    #    pass
                    #else:
                    #    break
                
                
                print '####   VOIRFILMS -> SPEEDVIDEO   ###### RESULT = %s' % result
                result = client.source('http://speedvideo.net/embed-' + result)
                print '####   VOIRFILMS -> SPEEDVIDEO   ###### RESULT = %s' % result
                
                video_base64 = re.compile('file: base64_decode\([\"](.+?)[\)]').findall(result)[0]
                video_base64_split = video_base64.split('\", ')
                video_base64 = video_base64_split[0]
                video_keyId = video_base64_split[1]
                
                tempLook = 'var ' + video_keyId + ' = '
                
                video_keyInt = int(re.compile(tempLook + '(.+?)[;]').findall(result)[0])
                video_part_one = video_base64[:video_keyInt]
                video_part_two = video_base64[(video_keyInt + 10):]
                
                video_url = video_part_one + video_part_two
                
                url = base64.b64decode(video_url)
                url = url.encode('utf-8')
                
                sources.append({'source': '(Fr) - Speedvideo', 'quality': 'SD', 'provider': 'Voirfilms', 'url': url})
                
                aFlag = 1
                
                j = j + 1
                
                if j > 10 :
                    break
        
        except :
            pass
        
        
        
        try :
            print 'GenesisFR ; VOIRFILMS -> OPENLOAD'
            
            j = 0

            while j <= len(result2) - 1 :
                
                try:
                    result = re.compile('https://openload.io/embed/(.+?)[\'|\"]').findall(result2)[j]
                except:
                    break
                
                
                print '####   VOIRFILMS -> OPENLOAD   ###### RESULT = %s' % result
                result = 'https://openload.io/embed/' + result
                print '####   VOIRFILMS -> OPENLOAD   ###### RESULT = %s' % result
                
                url = openload.resolve(result)            
                url = url.encode('utf-8')
                
                sources.append({'source': '(Fr) - Openload', 'quality': 'SD', 'provider': 'Voirfilms', 'url': url})
                
                aFlag = 1 
                
                j = j + 1
                
                if j > 10 :
                    break
                
        except :
            pass
        
        
        
        try :
            print 'GenesisFR ; VOIRFILMS -> STREAMIN'
            
            j = 0

            while j <= len(result2) - 1 :
                
                try:
                    result = re.compile('http://streamin.to/embed-(.+?)[\'|\"]').findall(result2)[j]
                except:
                    break
                
                
                print '####   VOIRFILMS -> STREAMIN   ###### RESULT = %s' % result
                result = 'http://streamin.to/embed-' + result
                print '####   VOIRFILMS -> STREAMIN   ###### RESULT = %s' % result
                
                url = streamin.resolve(result)            
                url = url.encode('utf-8')
                
                sources.append({'source': '(Fr) - Streamin', 'quality': 'SD', 'provider': 'Voirfilms', 'url': url})
                
                aFlag = 1 
                
                j = j + 1
                
                if j > 10 :
                    break
                
        except :
            pass
        
        
        
                
        try :
            #À vérifier plus tard ...
            print 'GenesisFR ; VOIRFILMS -> NOWVIDEO'
            
            j = 0

            while j <= len(result2) - 1 :
                
                try:
                    result = re.compile('http://embed.nowvideo.sx/embed.php\?(.+?)\&').findall(result2)[j]
                    print '####   VOIRFILMS -> NOWVIDEO   ###### RESULT = %s' % result
                except:
                    break
                
                
                print '####   VOIRFILMS -> NOWVIDEO   ###### RESULT = %s' % result
                result = 'http://embed.nowvideo.sx/embed.php\?' + result
                print '####   VOIRFILMS -> NOWVIDEO   ###### RESULT = %s' % result
                
                url = nowvideo.resolve(result)
                print '####   VOIRFILMS -> NOWVIDEO   ###### ur = %s' % url
                
                url = url.encode('utf-8')
                
                sources.append({'source': '(Fr) - Nowvideo', 'quality': 'SD', 'provider': 'Voirfilms', 'url': url})
                
                aFlag = 1 
                
                j = j + 1
                
                if j > 10 :
                    break
                
        except :
            pass
        
        
        try :
           
            print 'GenesisFR ; VOIRFILMS -> VODLOCKER'
            
            j = 0

            while j <= len(result2) - 1 :
                
                try:
                    result = re.compile('http://vodlocker.com/embed-(.+?)[\'|\"]').findall(result2)[j]
                    print '####   VOIRFILMS -> VODLOCKER   ###### RESULT = %s' % result
                except:
                    break
                
                
                print '####   VOIRFILMS -> VODLOCKER   ###### RESULT = %s' % result
                result = 'http://vodlocker.com/embed-' + result
                print '####   VOIRFILMS -> VODLOCKER   ###### RESULT = %s' % result
                
                url = vodlocker.resolve(result)
                print '####   VOIRFILMS -> VODLOCKER   ###### ur = %s' % url
                
                url = url.encode('utf-8')
                
                sources.append({'source': '(Fr) - Vodlocker', 'quality': 'SD', 'provider': 'Voirfilms', 'url': url})
                
                aFlag = 1 
                
                j = j + 1
                
                if j > 10 :
                    break
                
        except :
            pass

        
        
        return sources


    def resolve(self, url):

        try:
            if url.startswith('stack://'): return url

            url = client.request(url, output='geturl')

            if 'requiressl=yes' in url: url = url.replace('http://', 'https://')

            else: url = url.replace('https://', 'http://')

            return url

        except:
            return