<?php

require_once "../controllers/ClienteCtl.php";
require_once "../controllers/DispositivosCtl.php";
include_once "gerarToken.php";

if( $_SERVER['REQUEST_METHOD'] !== "POST" ){
    $retorno = array("status" => false, "motivoCritica" => 'Somente permitido método POST!');
    echo json_encode($retorno,  JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
    exit();
}

$header = null;
foreach (getallheaders() as $name => $value) {
    $header[strtolower($name)]= $value;
}

if (empty($header['adgtoken']) || is_null($header['adgtoken'])){
    $retorno = array("status" => false, "motivoCritica" => 'Segurança: informação vazia.');
    echo json_encode($retorno,  JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
    exit();
}

$jwt = $header['adgtoken'];

$json = file_get_contents('php://input');
if (empty($json) || is_null($json)){
    $retorno = array("status" => false, "motivoCritica" => 'Requisição Vazia!');
    echo json_encode($retorno,  JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
    exit();
}

//efeuta o teste do Token

if (abreToken($jwt, '#@2022Adg$#CDX') != "OK") {
    $retorno = array("status" => false, "motivoCritica" => 'Token Inválido');
    echo json_encode($retorno, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
    exit();
}

$resultado = json_decode($json);

$retorno = "";

if (!empty($resultado)) {

    $codCliente = $resultado->codCliente;
    $documento = preg_replace('/[^0-9]/', '', $resultado->documento);
    $razaoSocial = $resultado->razaoSocial;
    $fantasia = $resultado->fantasia;
    $telefone = $resultado->telefone;
    $email = $resultado->email;

    $ec = $resultado->ec;
    $numSerie = $resultado->numSerie;
    $numLogico = $resultado->numLogico;

    $cadastrarCliente = $resultado->cadastrarCliente;
    $cadastrarDispositivo = $resultado->cadastrarDispositivo;

    if($cadastrarCliente == true){

        $Cliente = new ClienteCtl();
        $Cliente->setCliCpfCnpj($documento);
        $resCliente = $Cliente->getClientePorCpf();
        if($resCliente->rowCount() > 0){
            $item = $resCliente->fetch(PDO::FETCH_OBJ);
            $codCliente = $item->cli_id;
        }else {
            $Cliente->setCliNomeRazao($razaoSocial);
            $Cliente->setCliFantasia($fantasia);
            $Cliente->setCliCpfCnpj($documento);
            $Cliente->setCliTelefone($telefone);
            $Cliente->setCliEmail($email);
            $Cliente->setCliTipo("PESSOA JURÍDICA");
            $resCliente = $Cliente->inserir();
            $codCliente = $Cliente->getCliId();
        }
    }

    $Cliente = new ClienteCtl();
    $Cliente->setCliCpfCnpj($documento);
    $resCliente = $Cliente->getClientePorCpf();
    if($resCliente->rowCount() > 0){
        $item = $resCliente->fetch(PDO::FETCH_OBJ);
        $codCliente = $item->cli_id;

        if ($cadastrarDispositivo == true){
            //verifica se existe o dispositico
            $Dispositivos = new DispositivosCtl();
            $Dispositivos->setDptNumSerie($numSerie);
            $resDispositivo = $Dispositivos->getPorNumSerieAtivo();
            if($resDispositivo->rowCount() > 0){
                //se existir dispositivo, verificar se esta vinculado
                $dadosDispo = $resDispositivo->fetch(PDO::FETCH_OBJ);
                if($dadosDispo->cli_id > 0){
                    //erro dispositivo ja vinculado
                    $retorno = array("status" => false, "motivoCritica" => 'Este dispositivo ja esta vinculado a outro cliente.');
                }else{
                    //apenas vincula sem cadastrar o dispositivo
                    $Dispositivos->setDptId($dadosDispo->dpt_id);
                    $Dispositivos->setCliId($codCliente);
                    $Dispositivos->vincularDipositivo();

                    $retorno = array("status" => true,
                        "codCliente"=>$codCliente,
                        "documento"=>$documento,
                        "razaoSocial"=>$razaoSocial,
                        "fantasia"=>$fantasia,
                        "email"=>$email,
                        "telefone"=>$telefone
                    );
                }
            }else{
                $Dispositivos = new DispositivosCtl();
                $Dispositivos->setCliId($codCliente);
                $Dispositivos->setDptNumSerie($numSerie);
                $Dispositivos->setDptNumLogico($numLogico);
                $Dispositivos->setDptEC($ec);
                $resDispositivo = $Dispositivos->inserir();

                $retorno = array("status" => true,
                    "codCliente"=>$codCliente,
                    "documento"=>$documento,
                    "razaoSocial"=>$razaoSocial,
                    "fantasia"=>$fantasia,
                    "email"=>$email,
                    "telefone"=>$telefone
                );
            }


        }else{
            $retorno = array("status" => false, "motivoCritica" => 'Nenhum dispositivo vinculado.');
        }

    }else {

        $retorno = array("status" => false, "motivoCritica" => 'Nao encontrado cliente com este Documento.');

    }


}else{
    $retorno = array("status" => false, "motivoCritica" => 'Requisição Vazia!');
}

echo json_encode($retorno,  JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);