
import re, json
from   generic.gn_api       import   gn_api # 
from   generic.gn_request   import   Request # 

class hubspot(gn_api):
    """
    https://app.hubspot.com/login
    william@softdib.com.br - Softdib123456

    Args:
        gn_api ([type]): [description]
    """
    def __init__(self, argv:list):
        self.db = False
        setup   = self.setup(argv)
        #pat-na1-cd30782a-7f46-41d4-82df-ca2408a65c74
        self.hubspot_request = Request(
                base_url = 'https://api.hubapi.com/crm/v3/objects/'
            ,   headers={
                'content-type': "application/json",
                'accept': "application/json",
                #'Authorization': 'Bearer pat-na1-cd30782a-7f46-41d4-82df-ca2408a65c74',
                **self.get_token('Authorization')
            }) 
        self.request_users      = []
        self.request_pipelines  = []
        
        super(hubspot, self, ).__init__()
        
        print('Fim')
        
    
    
    def format_cnpj(self, data):
        return """(SELECT
            INSERT(
                INSERT( 
                    INSERT( 
                        INSERT( TBCLIENTE.VLCPFCNPJ, 13, 0, '-' ), 9, 0, '/' 
                    ), 6, 0, '.' 
                ), 3, 0, '.')
        )
        """
        
    def telefone(self, data):
        return "(SELECT CONCAT('+55', CAST(TBCLIENTE.VLDDD AS CHAR),CAST(TBCLIENTE.VLTELEFONE AS CHAR)))"
    
    
    def hubspot_owner_id(self, id):
        
        if not id : return '\"\"'
        if not self.request_users:
            request_users = Request(
                    url = f'https://api.hubapi.com/crm/v3/owners/'
                ,   headers={
                    'content-type': "application/json",
                    'accept': "application/json",
                    #'Authorization': 'Bearer pat-na1-cd30782a-7f46-41d4-82df-ca2408a65c74',
                    **self.get_token('Authorization')
                }).doRequest()
            
            if(request_users.ok):
                self.request_users = request_users.json().get('results',[])
            
        
        data, = list(filter(lambda user: user['userId'] == int(id),self.request_users)) or [{}]
        
        return data.get('id','')
        
        
    
    def pipeline_replacement(self, pipeline_ref):
        if not pipeline_ref : return ''
        if not self.request_pipelines:
            request_pipelines = Request(
                    url = f'https://api.hubapi.com/crm/v3/pipelines/deals/'
                ,   headers={
                    'content-type': "application/json",
                    'accept': "application/json",
                    **self.get_token('Authorization')
                }
                #,   params   = {
                #    "hapikey":"00324872-f7a4-4fe5-bd93-15e5406bd891"
                #}
            ).doRequest()
            
            if(request_pipelines.ok):
                self.request_pipelines = request_pipelines.json().get('results',[])
                
        self.pipeline_label, = list(filter(lambda pipeline: pipeline['label'] == pipeline_ref, self.request_pipelines)) or [{}]
        
        return self.pipeline_label.get('id')
        
    
    
    def dealstage_replacement(self, stage_ref):
        if not stage_ref : return ''
        stage_label,    = list(filter(lambda stage   : stage['label']    == stage_ref, self.pipeline_label.get('stages',[]))) or [{}]
        
        return stage_label.get('id','')
        
        
    def description(self, data):
        #if "\n" in data:
        #    print('')
        return data.replace("\n", "\\\\n")
        
        
        
        
        
    def dealstage(self, data):
        return """(
            SELECT IF(
                TBCLIENTEXNOTAS.FGSTATUS IN ('C', 'E'),
                'Nota Fiscal Cancelada ',
                'Nota Fiscal Faturada'
            )
        )"""
        
        
        
    #--------------------------------------------------------#
    #------------------ TRATAMENTO RESPONSE  ----------------#
    #--------------------------------------------------------#
    
    def response_code_200(self, req) :
        return super().response_code_201(req)
        
    
    
    
    
    
    
    def __del__(self):
        self.createLog("999","Final da exportacao")
    
    
    
    
    
    
    
    
    