# -*- coding: utf-8 -*-
from functools import partial
import re


from PyQt5 import QtCore
from PyQt5.QtWebEngineWidgets import QWebEngineView
from jinja2 import Environment, FileSystemLoader


from Views.mainFornecedor import Ui_ct_MainFornecedor
from Views.formFornecedor import Ui_ct_FormFornecedor
from Crud.CrudFornecedor import CrudFornecedor
from Crud.CrudCompra import CrudCompra


class MainFornecedor(Ui_ct_MainFornecedor, Ui_ct_FormFornecedor):

    def mainfornecedor(self, frame):
        super(MainFornecedor, self).setMainFornecedor(frame)
        self.frameMainFornecedor.show()

        # Icone Botoes
        self.IconeBotaoForm(self.bt_AddNovoFornecedor,
                            self.resourcepath('Images/addFornecedor.svg'))
        self.IconeBotaoMenu(self.bt_BuscaFornecedor,
                            self.resourcepath('Images/search.png'))
        self.IconeBotaoMenu(self.bt_PrintRelatForn,
                            self.resourcepath('Images/gtk-print.png'))

        # Botao Adicionar Cliente / FormFornecedor
        self.bt_AddNovoFornecedor.clicked.connect(self.FormFornecedor)

        self.tb_Fornecedor.setColumnHidden(0, True)
        self.tb_Fornecedor.setColumnWidth(1, 40)
        self.tb_Fornecedor.setColumnWidth(2, 270)
        self.tb_Fornecedor.setColumnWidth(3, 130)
        self.tb_Fornecedor.setColumnWidth(4, 225)
        self.tb_Fornecedor.setColumnWidth(5, 225)
        self.tb_Fornecedor.setColumnWidth(6, 60)

        # Populando Tabela Fornecedor
        self.TabelaFornecedor()

        # buscando por nome
        self.tx_BuscaFornecedor.textEdited.connect(self.TabelaFornecedor)

        # Imprimindo Tabela
        self.bt_PrintRelatForn.clicked.connect(self.imprimir)

    def TabelaFornecedor(self):
        lista = CrudFornecedor()
        lista.nomeFantasia = self.tx_BuscaFornecedor.text()
        lista.listaFornecedor()

        # Limpando Tabela
        while self.tb_Fornecedor.rowCount() > 0:
            self.tb_Fornecedor.removeRow(0)

        i = 0
        if len(lista.nomeFantasia) >= 1:
            while i < len(lista.nomeFantasia):
                self.tb_Fornecedor.insertRow(i)
                self.TabelaStatus(self.tb_Fornecedor, i,
                                  0, self.StatusEntrega(1))
                self.TabelaID(self.tb_Fornecedor, i, 1,
                              lista.id[i])
                self.TabelaNomeTelefone(self.tb_Fornecedor, i, 2,
                                        lista.nomeFantasia[i],
                                        lista.razaoSocial[i])
                self.TabelaNomeTelefone(self.tb_Fornecedor, i, 3,
                                        self.formatoNumTelefone(
                                            lista.telefone[i]), "")
                self.TabelaNomeTelefone(self.tb_Fornecedor, i, 4,
                                        lista.email[i], "")
                self.TabelaNomeTelefone(self.tb_Fornecedor, i, 5,
                                        lista.site[i], "")
                # Sinal click tabela
                self.botaoTabela(self.tb_Fornecedor, i, 6,
                                 partial(self.SelectFornecedor,
                                         lista.id[i]), "#005099")
                i += 1
        pass

    # Seleciona Cliente por ID
    def SelectFornecedor(self, id):
        busca = CrudFornecedor()
        self.FormFornecedor()
        busca.id = id
        busca.SelectFornecedorId()
        self.tx_Id.setText(str(busca.id))
        self.tx_NomeFantasia.setText(busca.nomeFantasia)
        self.tx_RazaoSocial.setText(busca.razaoSocial)
        self.tx_cnpj.setText(str(busca.cnpj))
        self.tx_InscEstadual.setText(str(busca.inscEstadual))
        self.tx_Telefone.setText(str(busca.telefone))
        self.tx_Site.setText(busca.site)
        self.tx_Email.setText(busca.email)
        self.tx_Obs.setText(busca.obs)
        self.tx_Cep.setText(busca.cep)
        self.tx_Endereco.setText(busca.endereco)
        self.tx_Numero.setText(str(busca.numero))
        self.tx_Bairro.setText(busca.bairro)
        self.tx_Cidade.setText(busca.cidade)
        self.tx_Estado.setText(busca.estado)

        # Limpando tabela Histórico de Compras
        for row in range(self.tb_Historico.rowCount()):
            self.tb_Historico.removeRow(row)

        # Histórico de Compras cliente
        total = '0.00'
        lista = CrudCompra()
        lista.idFornecedor = id
        lista.selectCompraFornecedor()
        i = 0

        while i < len(lista.dataEmissao):
            # print row
            self.tb_Historico.insertRow(i)
            self.conteudoTabela(
                self.tb_Historico, i, 0, str(lista.dataEmissao[i]))
            self.conteudoTabela(
                self.tb_Historico, i, 1, str(lista.dataEntrega[i]))
            self.conteudoTabela(
                self.tb_Historico, i, 2, str(lista.valorTotal[i]))

            total = float(lista.valorTotal[i]) + float(total)
            i += 1

        self.lb_TotalHistorico.setText(format(float(total), ".2f"))
        pass

        # Frame Formulário Produtos
    def FormFornecedor(self):
        # self.DesativaBotaoProdutos()
        self.LimpaFrame(self.ct_containerFornecedor)
        super(MainFornecedor, self).setFormFornecedor(
            self.ct_containerFornecedor)
        self.fr_FormFornecedor.show()

        # Icone Botoes
        self.IconeBotaoMenu(self.bt_Salvar,
                            self.resourcepath('Images/salvar.png'))
        self.IconeBotaoMenu(self.bt_Voltar,
                            self.resourcepath('Images/cancelar.png'))
        self.IconeBotaoMenu(self.bt_BuscaCep,
                            self.resourcepath('Images/find.png'))

        # Checando se existe ID válido
        self.IdCheckFornecedor()

        # Tamanho tabela Histórico
        self.tb_Historico.setColumnWidth(0, 100)
        self.tb_Historico.setColumnWidth(1, 100)
        self.tb_Historico.setColumnWidth(2, 100)

        # Botao Salvar
        self.bt_Salvar.clicked.connect(self.VerificaInputFornecedor)

        # Botão Voltar
        self.bt_Voltar.clicked.connect(self.janelaFornecedor)

        # Buscar Cep
        self.bt_BuscaCep.clicked.connect(self.buscarCepCliente)
        self.tx_Cep.returnPressed.connect(self.buscarCepCliente)

    # checando campo Id se é Edicao ou Novo Fornecedor
    def IdCheckFornecedor(self):
        if not self.tx_Id.text():
            busca = CrudFornecedor()
            self.tx_Id.setText(str(busca.lastIdFornecedor()))

    # Verificando Campos antes do INPUT
    def VerificaInputFornecedor(self):
        if not self.tx_NomeFantasia.text():
            self.tx_NomeFantasia.setFocus()
        elif not self.tx_Telefone.text():
            self.tx_Telefone.setFocus()
        else:
            self.CadFornecedor()

    # Cadastrando fornecedor
    def CadFornecedor(self):
        INSERI = CrudFornecedor()
        INSERI.id = self.tx_Id.text()
        INSERI.nomeFantasia = self.tx_NomeFantasia.text().upper()
        INSERI.razaoSocial = self.tx_RazaoSocial.text().upper()
        INSERI.cnpj = self.tx_cnpj.text()
        INSERI.inscEstadual = self.tx_InscEstadual.text()
        INSERI.telefone = re.sub(
            '[^[0-9]', '', self.tx_Telefone.text())
        INSERI.email = self.tx_Email.text()
        INSERI.site = self.tx_Site.text()
        INSERI.obs = self.tx_Obs.text().upper()
        INSERI.cep = re.sub(
            '[^[0-9]', '', self.tx_Cep.text())
        INSERI.endereco = self.tx_Endereco.text().upper()
        INSERI.numero = self.tx_Numero.text()
        INSERI.bairro = self.tx_Bairro.text().upper()
        INSERI.cidade = self.tx_Cidade.text().upper()
        INSERI.estado = self.tx_Estado.text()
        INSERI.inseriFornecedor()
        self.janelaFornecedor()

    # Imprimindo
    def imprimir(self):
        self.documento = QWebEngineView()

        headertable = ["Cod", "Nome Fantasia", "Telefone", "Email", "Site"]

        codcliente = []
        nomeFornecedor = []
        telefoneFornecedor = []
        siteFornecedor = []
        emailFornecedor = []

        i = 0
        for i in range(self.tb_Fornecedor.rowCount()):
            codcliente.append(self.tb_Fornecedor.cellWidget(i, 1).text())
            nomeFornecedor.append(self.tb_Fornecedor.cellWidget(i, 2).text())
            telefoneFornecedor.append(
                self.tb_Fornecedor.cellWidget(i, 3).text())
            siteFornecedor.append(self.tb_Fornecedor.cellWidget(i, 4).text())
            emailFornecedor.append(self.tb_Fornecedor.cellWidget(i, 5).text())
            i += 1

        html = self.renderTemplate(
            "report.html",
            estilo=self.resourcepath('Template/estilo.css'),
            titulo="LISTAGEM FORNECEDOR",
            headertable=headertable,
            codcliente=codcliente,
            nomeFornecedor=nomeFornecedor,
            telefoneFornecedor=telefoneFornecedor,
            siteFornecedor=siteFornecedor,
            emailFornecedor=emailFornecedor
        )

        self.documento.load(QtCore.QUrl.fromLocalFile(
                                        self.resourcepath("report.html")))
        self.documento.loadFinished['bool'].connect(self.previaImpressao)
