<?php

$pastaRaiz = "/home/clubcvtocombr/public_html";
include_once './config.php';
include_once '../env.php';
include_once './log.php';
require_once($pastaRaiz . "/split/public/conexao/conexao.php");

class Processa {

    private $conn;
    private $token = "QPJXRYEHGOPWXDLTEQKBPZTFSKWVFDMXFRQOQVGESQLATZWJDJSVWITRWDEGBIBDCSQFNWDIKFIZNSMSNMRWLQAWYZRNQZCJOIYBIRWGGJLQATDDQMTOQFSLRUHOEPRK";
    private $appKey = "vtexappkey-arsdesign-XYJDKR";

    public function __construct() {
        $this->conn = new Conexao();
    }

    public function geraXml() {
        $doca = $_POST['docaArquivo'];
        $recebeStockAdminSeller = "";
        if (!empty($_FILES['arquivo']['tmp_name'])) {

            $arquivo = new DomDocument();
            $arquivo->load($_FILES['arquivo']['tmp_name']);


            $linhas = $arquivo->getElementsByTagName("Row");


            $primeira_linha = true;

            foreach ($linhas as $linha) {
                if ($primeira_linha == false) {
                    $skuVtex = $linha->getElementsByTagName("Data")->item(0)->nodeValue;


                    $nameProduct = $linha->getElementsByTagName("Data")->item(1)->nodeValue;


                    $sizeProduct = $linha->getElementsByTagName("Data")->item(2)->nodeValue;


                    $skubhan = $linha->getElementsByTagName("Data")->item(3)->nodeValue;


                    $quantidadeEstoque = $linha->getElementsByTagName("Data")->item(4)->nodeValue;

                    $sql_mostra_agora = mysqli_query($this->conn->conectar(), "SELECT * FROM stock");

                    while ($stockAdminSeller = mysqli_fetch_array($sql_mostra_agora)) {
                        $recebeStockAdminSeller = $stockAdminSeller['skuVtex'];
                        $stock[] = $recebeStockAdminSeller;
                    }

                    if (in_array($skuVtex, $stock)) {
                        $sql_mostra_agora_tudo = mysqli_query($this->conn->conectar(), "SELECT * FROM stock" . " where " . "skuVtex = " . "'" . $skuVtex . "'");

                        $stockAdminSellerMostra = mysqli_fetch_array($sql_mostra_agora_tudo);

                        $result_usuario = "UPDATE stock SET " . $doca . " = '$quantidadeEstoque' " . "WHERE id='" . $stockAdminSellerMostra['id'] . "'";
                        echo "<br>" . $result_usuario . "<br>";
                    } else if (!in_array($skuVtex, $stock)) {
                        //Desenvolvimento n찾o finalizado para insert
                        //$result_usuario = "INSERT INTO stock(skuVtex,nameProduct,sizeProduct,skubhan,$doca) VALUES ('$skuVtex','$nameProduct','$sizeProduct','$skubhan',$quantidadeEstoque)";
                        echo "<br>" . $result_usuario . "<br>";
                    }




                    //$resultado_usuario = mysqli_query($this->conn->conectar(), $result_usuario);
                }
                $primeira_linha = false;
            }
        }
    }

    public function zeraEstoque($geraDocaCron, $geraArquivoCron, $arquivoNovoCaminhoCron) {
        // echo $geraDocaCron." - ".$geraArquivoCron." - ".$arquivoNovoCaminhoCron;
        //exit;
        global $entityManager;
        $userSellerNew = $entityManager->getRepository('App\Models\Entity\Seller\UserSeller');

        $stockHasRepositoryNew = $entityManager->getRepository('App\Models\Entity\StockHasUserSeller');
        $primeira_linha = true;
        $valoresNaoAtualizados = [];
        $arquivoD = fopen($geraArquivoCron, 'r');
        while (!feof($arquivoD)) {

            $data = fgetcsv($arquivoD);

            //exit;
            if ($primeira_linha == true) {
                $eanData = $data[0];
                $quantidadeData = $data[1];

                $primeiraLinhaData = $eanData . " - " . $quantidadeData;
            }

            if ($primeira_linha == false) {
                $buscaEstoque = $this->buscarEstoque($primeiraLinhaData, $data[0]);
                $sql_mostra_agora_tudo = mysqli_query($this->conn->conectar(), $buscaEstoque);

                $stockAdminSellerMostra = mysqli_fetch_array($sql_mostra_agora_tudo);

                if (!is_null($stockAdminSellerMostra[lcfirst($geraDocaCron)])) {
                    $DocaEstoque = $data[1];
                }

                if (!is_null($stockAdminSellerMostra[$geraDocaCron])) {
                    $DocaEstoque = $data[1];
                }



                if (!empty($stockAdminSellerMostra["skuVtex"])) {

                    //$result_usuario = "UPDATE stock SET " . $geraDocaCron . " = '$DocaEstoque' " . "WHERE id='" . $stockAdminSellerMostra['id'] . "'";

                     $queryIdUserSellerNew = $userSellerNew->createQueryBuilder('t')->select('t.id')->where("t.warehouseId = '" . $geraDocaCron . "'")->getQuery();
                        $idUserSellerNew = $queryIdUserSellerNew->getResult();

                        $queryIdStockNew = $stockHasRepositoryNew->createQueryBuilder('t')->select('t.id,t.quantidade')->where("t.idStock = '" . $stockAdminSellerMostra['id'] . "' and t.idUserSeller = '" . $idUserSellerNew[0]['id'] . "'")->getQuery();
                        $idStockNew = $queryIdStockNew->getResult();
                        
                        $executaUpdate = $stockHasRepositoryNew->createQueryBuilder('ud')->update()
                                        ->set('ud.quantidade', $data[1])
                                        ->where('ud.id = :userId')
                                        ->setParameter('userId', $idStockNew[0]['id'])
                                        ->getQuery()->execute();

                    $this->envioVtexStockSeller($DocaEstoque, lcfirst($geraDocaCron), $stockAdminSellerMostra["outletCvto"], $stockAdminSellerMostra["skuVtex"]);
                } else if (empty($stockAdminSellerMostra["skuVtex"]) && !empty($data[0])) {

                    $valoresNaoAtualizados[] = $data[0];
                }

                //$resultado_usuario = mysqli_query($this->conn->conectar(), $result_usuario);
            }
            $primeira_linha = false;
        }
        fclose($arquivoD);
        rename($geraArquivoCron, $arquivoNovoCaminhoCron);
        if ($valoresNaoAtualizados != '') {
            $valorRetorno = implode(' - ', $valoresNaoAtualizados);
            echo '
    <script>
    alert("' . 'C처digos que n찾o foram atualizados' . '\n\n' . $valorRetorno . '");
    
    </script>';
        }
    }

    public function geraCsv($geraDocaCron, $geraArquivoCron, $arquivoNovoCaminhoCron) {
        global $entityManager;
        $userSellerNew = $entityManager->getRepository('App\Models\Entity\Seller\UserSeller');

        $stockHasRepositoryNew = $entityManager->getRepository('App\Models\Entity\StockHasUserSeller');

        $doca = $_POST['docaArquivo'];
        $recebeStockAdminSeller = "";

        if ((!empty($_FILES['arquivo']['tmp_name'])) && ($doca != null)) {

            $arquivo = fopen($_FILES['arquivo']['tmp_name'], 'r');

            switch ($doca) {
                case 'Life':
                    $colunaAdminSellerDoca = "life";
                    $this->bancoAdminSellerStockParaVtex($arquivo, $doca);
                    break;
                case 'forMen':

                    $this->bancoAdminSellerStockParaVtex($arquivo, $doca);
                    break;
                case 'Maiusculo':

                    $this->bancoAdminSellerStockParaVtex($arquivo, $doca);
                    break;
                case 'GianottoModas':

                    $this->bancoAdminSellerStockParaVtex($arquivo, $doca);
                    break;
                case 'Vestylle':

                    $this->bancoAdminSellerStockParaVtex($arquivo, $doca);
                    break;
                case 'outletConvicto':

                    $this->bancoAdminSellerStockParaVtex($arquivo, $doca);
                    break;
                case 'Haut':

                    $this->bancoAdminSellerStockParaVtex($arquivo, $doca);
                    break;
                case 'Dimazzo':

                    $this->bancoAdminSellerStockParaVtex($arquivo, $doca);
                    break;
                case 'Origem':

                    $this->bancoAdminSellerStockParaVtex($arquivo, $doca);
                    break;
                case 'Emporio':

                    $this->bancoAdminSellerStockParaVtex($arquivo, $doca);
                    break;
                case 'Abusiva':

                    $this->bancoAdminSellerStockParaVtex($arquivo, $doca);
                    break;
                case 'SignoriOtto':

                    $this->bancoAdminSellerStockParaVtex($arquivo, $doca);
                    break;
                default:

                    break;
            }
        } else if (($geraDocaCron != null) && ($geraArquivoCron != null)) {

            $primeira_linha = true;
            $valoresNaoAtualizados = [];
            $arquivoD = fopen($geraArquivoCron, 'r');
            $geraDocaCron = lcfirst($geraDocaCron);
            while (!feof($arquivoD)) {

                $data = fgetcsv($arquivoD);

                //exit;
                if ($primeira_linha == true) {
                    $eanData = $data[0];
                    $quantidadeData = $data[1];

                    $primeiraLinhaData = $eanData . " - " . $quantidadeData;
                }

                if ($primeira_linha == false) {
                    $buscaEstoque = $this->buscarEstoque($primeiraLinhaData, $data[0]);
                    $sql_mostra_agora_tudo = mysqli_query($this->conn->conectar(), $buscaEstoque);

                    $stockAdminSellerMostra = mysqli_fetch_array($sql_mostra_agora_tudo);

                    if (!is_null($stockAdminSellerMostra[lcfirst($geraDocaCron)])) {
                        $somaDocaEstoque = $stockAdminSellerMostra[lcfirst($geraDocaCron)] + $data[1];
                    }

                    if (!is_null($stockAdminSellerMostra[$geraDocaCron])) {
                        $somaDocaEstoque = $stockAdminSellerMostra[$geraDocaCron] + $data[1];
                    }



                    if (!empty($stockAdminSellerMostra["skuVtex"])) {

                        $queryIdUserSellerNew = $userSellerNew->createQueryBuilder('t')->select('t.id')->where("t.warehouseId = '" . $geraDocaCron . "'")->getQuery();
                        $idUserSellerNew = $queryIdUserSellerNew->getResult();

                        $queryIdStockNew = $stockHasRepositoryNew->createQueryBuilder('t')->select('t.id,t.quantidade')->where("t.idStock = '" . $stockAdminSellerMostra['id'] . "' and t.idUserSeller = '" . $idUserSellerNew[0]['id'] . "'")->getQuery();
                        $idStockNew = $queryIdStockNew->getResult();
                        $somaDocaEstoque = $idStockNew[0]['quantidade'] + $data[1];
                        $executaUpdate = $stockHasRepositoryNew->createQueryBuilder('ud')->update()
                                        ->set('ud.quantidade', $somaDocaEstoque)
                                        ->where('ud.id = :userId')
                                        ->setParameter('userId', $idStockNew[0]['id'])
                                        ->getQuery()->execute();

                        //$result_usuario = "UPDATE stock SET " . $geraDocaCron . " = '$somaDocaEstoque' " . "WHERE id='" . $stockAdminSellerMostra['id'] . "'";
                        if ($data[1] != 0) {
                            $this->envioVtexStockSeller($somaDocaEstoque, lcfirst($geraDocaCron), $stockAdminSellerMostra["outletCvto"], $stockAdminSellerMostra["skuVtex"]);
                        }
                    } else if (empty($stockAdminSellerMostra["skuVtex"]) && !empty($data[0])) {

                        $valoresNaoAtualizados[] = $data[0];
                    }

                    //$resultado_usuario = mysqli_query($this->conn->conectar(), $result_usuario);
                }
                $primeira_linha = false;
            }
            fclose($arquivoD);
            rename($geraArquivoCron, $arquivoNovoCaminhoCron);
            if ($valoresNaoAtualizados != '') {
                $valorRetorno = implode(' - ', $valoresNaoAtualizados);
                echo '
    <script>
    alert("' . 'C처digos que n찾o foram atualizados' . '\n\n' . $valorRetorno . '");
    
    </script>';
            }
        }
    }

    public function bancoAdminSellerStockParaVtex($arquivo, $doca) {
        global $entityManager;
        $userSellerNew = $entityManager->getRepository('App\Models\Entity\Seller\UserSeller');

        $stockHasRepositoryNew = $entityManager->getRepository('App\Models\Entity\StockHasUserSeller');
        $primeira_linha = true;
        $valoresNaoAtualizados = "";

        while (!feof($arquivo)) {

            $data = fgetcsv($arquivo);
            if ($primeira_linha == true) {
                $eanData = $data[0];
                $quantidadeData = $data[1];

                $primeiraLinhaData = $eanData . " - " . $quantidadeData;
            }

            if ($primeira_linha == false) {
                $buscaEstoque = $this->buscarEstoque($primeiraLinhaData, $data[0]);
                $sql_mostra_agora_tudo = mysqli_query($this->conn->conectar(), $buscaEstoque);

                $stockAdminSellerMostra = mysqli_fetch_array($sql_mostra_agora_tudo);

                if (!empty($stockAdminSellerMostra["skuVtex"])) {

                    $queryIdUserSellerNew = $userSellerNew->createQueryBuilder('t')->select('t.id')->where("t.warehouseId = '" . $doca . "'")->getQuery();
                    $idUserSellerNew = $queryIdUserSellerNew->getResult();

                    $queryIdStockNew = $stockHasRepositoryNew->createQueryBuilder('t')->select('t.id')->where("t.idStock = '" . $stockAdminSellerMostra['id'] . "' and t.idUserSeller = '" . $idUserSellerNew[0]['id'] . "'")->getQuery();
                    $idStockNew = $queryIdStockNew->getResult();

                    $executaUpdate = $stockHasRepositoryNew->createQueryBuilder('ud')->update()
                                    ->set('ud.quantidade', $data[1])
                                    ->where('ud.id = :userId')
                                    ->setParameter('userId', $idStockNew[0]['id'])
                                    ->getQuery()->execute();

                    //$result_usuario = "UPDATE stock SET " . $doca . " = '$data[1]' " . "WHERE id='" . $stockAdminSellerMostra['id'] . "'";

                    $this->envioVtexStockSeller($data[1], $doca, $stockAdminSellerMostra["outletCvto"], $stockAdminSellerMostra["skuVtex"]);
                } else if (empty($stockAdminSellerMostra["skuVtex"]) && !empty($data[0])) {

                    $valoresNaoAtualizados[] = $data[0];
                }

                //$resultado_usuario = mysqli_query($this->conn->conectar(), $result_usuario);
            }
            $primeira_linha = false;
        }

        fclose($arquivo);
        if ($valoresNaoAtualizados != '') {
            $valorRetorno = implode(' - ', $valoresNaoAtualizados);
            echo '
    <script>
    alert("' . 'C처digos que n찾o foram atualizados' . '\n\n' . $valorRetorno . '");
    
    </script>';
        }
        echo '<script>location.href="/split/public/seller/#/items/"</script>';
    }

    public function buscarEstoque($primeiraLinhaData, $numeroData) {

        if ($primeiraLinhaData == "ean - quantidade") {
            return "SELECT * FROM stock" . " where " . "ean = " . "'" . $numeroData . "'";
        } else if ($primeiraLinhaData == "sku - quantidade") {
            echo '<script>
                    alert("CSV primeira linha incorreta \n\n'
            . 'Incorreto = ' . $primeiraLinhaData . '\n\n' . 'Correto = ' . 'ean - quantidade' . '");
                    location.href="/split/public/seller/#/items/"
                    </script>';
        } else {
            echo '<script>
                    alert("CSV primeira linha incorreta \n\n'
            . 'Incorreto = ' . $primeiraLinhaData . '");
                    location.href="/split/public/seller/#/items/"
                    </script>';
        }
    }

    public function envioVtexStockSeller($estoqueSeller, $doca, $fabrica, $skuVtex) {

        if ($_POST['docaArquivoOrigem'] != null) {
            $docaArquivoOrigem = $_POST['docaArquivoOrigem'];
        } else if ($_POST['docaArquivoOrigem'] == null) {
            $docaArquivoOrigem = $doca;
        }
        if ($doca != "outletConvicto") {

            $novoValor = $estoqueSeller;
        } else if ($doca == "outletConvicto") {

            $novoValor = $estoqueSeller;
        }

        $curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_URL => "https://logistics.myvtex.com/api/logistics/pvt/inventory/skus/$skuVtex/warehouses/$docaArquivoOrigem?an=arsdesign",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => false,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "PUT",
            CURLOPT_POSTFIELDS => "{\n    \"unlimitedQuantity\": false,\n    \"dateUtcOnBalanceSystem\": null,\n    \"quantity\": {$novoValor},\n    \"timeToRefill\": 0\n}",
            CURLOPT_HTTPHEADER => array(
                "Content-Type: application/json; charset=utf-8",
                "Accept: application/json",
                "X-VTEX-API-AppToken: {$this->token}",
                "X-VTEX-API-AppKey: {$this->appKey}"
            ),
        ));

        $responseCurl = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);
    }

    public function somaFabricaLojista($estoqueSeller, $fabrica) {

        return $estoqueSeller + $fabrica;
    }

    public function uploadDoCsv() {
        $pastaRaiz = "/home/clubcvtocombr/public_html";
        $doca = $_POST['docaArquivo'];
        $extensao = pathinfo($_FILES['arquivo']['name']);
        $extensao = "." . $extensao['extension'];
        $mudaNomeCsv = time() . uniqid(md5()) . $extensao;

        $pastaExiste = $pastaRaiz . '/split/public/seller/arquivo/enviarparavtex/' . $doca;
        $pastaExisteDois = $pastaRaiz . '/split/public/seller/arquivo/finalizadoenvioparavtex/' . $doca;

        if (!file_exists($pastaExisteDois)) {
            mkdir($pastaRaiz . '/split/public/seller/arquivo/finalizadoenvioparavtex/' . $doca);
        }
        if (!file_exists($pastaExiste)) {
            mkdir($pastaRaiz . '/split/public/seller/arquivo/enviarparavtex/' . $doca);
        }

        $name = $pastaRaiz . '/split/public/seller/arquivo/enviarparavtex/' . $doca . '/' . $mudaNomeCsv;

        $temp = $_FILES['arquivo']['tmp_name'];

        if (move_uploaded_file($temp, $name)) {
            echo '
    <script>
    alert("Planilha Encaminhada com Sucesso!");
    location.href="/split/public/seller/#/items/"
    </script>';
        } else {
            echo '
    <script>
    alert("Falha de envio .csv!");
    location.href="/split/public/seller/#/items/"
    </script>';
        }
    }

}

if ($_POST['docaArquivo'] != null) {
    $exec = new Processa();

    if (substr($_FILES['arquivo']['name'], -4) == '.xml') {

        echo '
    <script>
    alert("Favor enviar arquivo .csv");
    location.href="/split/public/seller/#/items/"
    </script>';

        //$exec->geraXml();
    } else if (substr($_FILES['arquivo']['name'], -4) == '.csv') {
        $exec->uploadDoCsv();
        //$exec->geraCsv();
    } if ((substr($_FILES['arquivo']['name'], -4) != '.csv') || (substr($_FILES['arquivo']['name'], -4) != '.xml')) {
        echo '
    <script>
    alert("Favor adicionar arquivo csv");
    location.href="/split/public/seller/#/items/"
    </script>';
    }
}



