import json, os
import constant

class IndexerMain:
    
    routeURI = False
    routeKeys = False

    baseJson = False
    baseHtml = False
    baseAddr = '/var/www/indexer/'

    useLowerCase = True

    debug = False

    """
        Delimitador de títulos das páginas
    """
    siteTitleDelimiter = ''

    siteName = ''

    hostName = ''

    def __init__(self,**args):
        self.baseJson = args.get('baseJson',False)

        #self.hostName = 'https://%s' % args.get('hostname','localhost')
        #self.siteName = args.get('sitename','Nome do site')
        #self.hostName = 'https://%s' % self.baseJson['__config__']['hostname']
        #self.siteName = self.baseJson['__config__']['sitename']
        self.hostName = 'https://%s' % constant.hostname
        self.siteName = constant.sitename
        
        self.siteTitleDelimiter = args.get('delimiter','|')
        a = 1

    def getRouteFromURI(self,uri):
        """
            Descobre rota através da REQUEST_URI
        """
        if not uri:
            self.routeKeys = ['','__index__']

        if not self.routeKeys:

            # Grava URI
            self.routeURI = uri.lower() if self.useLowerCase else uri
            
            # Grava Keys da URI
            self.routeKeys = self.routeURI.split('/')

        return self.routeKeys

    def getBaseHtml(self):
        """
            Retorna BASE HTML
        """

        if not self.baseHtml:
            baseFile = open('%sbase.html' % self.baseAddr,'r',encoding='utf-8')
            baseData = baseFile.read()
            baseFile.close()

            self.baseHtml = json.loads(baseData,encoding='utf-8')

        return self.baseHtml

    def getLoopForFile(self):
        
        seo = {}
        
        if len(self.routeKeys) > 1:

            keyA = self.baseJson[self.routeKeys[1]] or False

            if not keyA:
                """
                    Primeira barra
                    /tratamentos /produto /etc...
                """
                raise Exception('Página não encontrada',status='404 NOT FOUND',message='Página não encontrada',code=1)
            
            seo['title'] = keyA['title']
            seo['description'] = keyA['description']
            seo['keywords'] = ', '.join(keyA['keywords'])
            seo['type'] = keyA['type'] if 'type' in keyA else 'website'
            seo['image'] = keyA['image'] if 'image' in keyA else ''
            seo['author'] = keyA['author'] if 'author' in keyA else ''

            if 'children' in keyA:
                """
                    Se tiver páginas dentro
                """
                keyB = keyA['children'][self.routeKeys[2]] if self.routeKeys[2] in keyA['children'] else False

                if not keyA['alone'] and not keyB:
                    print("NOT ALONE, AND DOES NOT KEYB")
                    raise Exception('Página não encontrada',status='404 NOT FOUND',message='Página não encontrada',code=2)
            
                if keyB:
                    """
                        Segunda barra
                        /tratamentos/invisalign /produto/juice-3901-gold
                    """
                    seo['title'] = '%s %s %s' % (keyA['title'],self.siteTitleDelimiter,keyB['title'])
                    seo['description'] = keyB['description']
                    seo['keywords'] = '%s, %s' % (seo['keywords'],', '.join(keyB['keywords']))
                    seo['image'] = keyB['image'] if 'image' in keyB else ''

            seo['og'] = {
                'sitename': self.siteName,
                'title':seo['title'],
                'description':seo['description'],
                'image':seo['image'],
                'type':seo['type'],
                'url':'%s%s' % (self.hostName,self.routeURI)
            }

        return seo