import base64
from   generic.gn_request   import   Request # 
from   woocommerce.woocommerce       import   woocommerce # 
from  datetime              import datetime, timedelta
import traceback, json

class kilmer(woocommerce):
    def __init__(self, argv:list):
        super(kilmer, self, ).__init__(argv)

    def afterGet_sincronizar_produtos(self, products):
        # Consultar todos os produtos
        consultar_todos = True
        page = 1

        if len(products) < 100:
            return products

        while consultar_todos:
            mais_products = self.woocommerce_request.doRequest(
                rote=f"products?page={page}&per_page=100",
            )

            if mais_products.ok:
                mais_products = mais_products.json()
                if len(mais_products) > 0:
                    products.extend(mais_products)
                    page += 1
                else:
                    consultar_todos = False
            else:
                self.createLog(mais_products.status_code, f"Erro ao consultar produtos na WooCommerce: {mais_products.text}")
                consultar_todos = False

    def sincronizar_produtos_handler(self, products):
        try:
            self.createLog(201, 'Iniciando sincronização de produtos')
            
            products_softdib = self.select(f"SELECT * FROM TBPRODUTO WHERE CDEMPRESA IN ({int(self.cdempresa)}, 0) AND CDFILIAL IN ({int(self.cdfilial)}, 0)")

            for product in products_softdib:
                # Preciso de uma função usando lambda que eu consiga dentro de products achar o produto que contenha o CDPRODUTO no products[index]['Product']['reference'] 
                self.createLog(201, f"Verificando se o produto existe na WooCommerce... => {product['CDPRODUTO']}")

                existProduct = next((p for p in products if product['CDPRODUTO'] in p['sku']), None)
                
                if not existProduct:
                    self.createLog(404, f"Produto {product['CDPRODUTO']} não encontrado na WooCommerce.")
                    continue

                checkExistInRelatement = self.select(f"SELECT * FROM TBRELACIONAID WHERE NMNOMEAPI = 'woocommerce' AND NMTABELA = 'TBPRODUTO' AND IDSOFTDIB = {product['CDPRODUTO']} AND IDAPI = {existProduct['id']}")

                if not checkExistInRelatement and existProduct:
                    self.relatement({
                        "NMNOMEAPI"         : "woocommerce",
                        "NMTABELA"          : "TBPRODUTO",
                        "IDAPI"             : existProduct['id'],
                        "IDSOFTDIB"         : product['CDPRODUTO'],
                        "DTULTIMAALTERACAO" : datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
                        "HASHMD5"           : "INTEGRADO"
                    })

                    self.createLog(201, f"Produto {product['CDPRODUTO']} integrado com sucesso. ID WooCommerce.. => {existProduct['id']}")
                elif checkExistInRelatement:
                    self.createLog(200, f"Produto {product['CDPRODUTO']} já está integrado. ID WooCommerce.. => {existProduct['id']}")
                else:
                    self.createLog(404, f"Produto {product['CDPRODUTO']} não encontrado na WooCommerce")

            print('Sincronização de produtos concluída com sucesso.')
        except Exception as e:
            print('Erro durante a sincronização de produtos:')
            traceback.print_exc()

    def format_rote_sincronizar_produtos(self, rote):
        return "products?per_page=100"
    
    def beforeSend_estoque(self, data):
        if self.current_data['woocommerce_id'] == None:
            self.ignore_request = True
            return
        
        self.current_rote = f"products/{self.current_data['woocommerce_id']}"
        return data