<?php

class Agro_Essor_EsscrEventos_Pessoas
{
    private $bearerToken = '';

    /**
     * Construtor da classe que se autentica no ESSCR Eventos
     */
    public function __construct()
    {
        $this->bearerToken = Agro_Essor_EsscrEventos_Auth::login();
    }

    /**
     * Executa a consulta de restrição técnica pelo cpf/cnpj informado
     * Rota: /api/{Versao}/pessoas/restricao-tecnica?cpfCnpj={cpfCnpj}
     *
     * @param string $cpfCnpj
     * @return array
     */
    public function restricaoTecnica(string $cpfCnpj): array
    {
        $cpfCnpj = preg_replace('/[.\-\/\s]/', '', $cpfCnpj);

        $url = ESSCR_EVENTOS_URL . "/api/" . ESSCR_EVENTOS_VERSION . "/pessoas/restricao-tecnica?cpfCnpj={$cpfCnpj}";
        $ch = curl_init($url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            "Authorization: Bearer {$this->bearerToken}"
        ]);

        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        $data = json_decode($response, true);

        if (empty($data) || $httpCode != 200) {

            if ($data['mensagem']) {
                throw new Exception("[ESSCR] " . $data['mensagem']);
            }

            throw new Exception("[ESSCR] Erro ao realizar a requisição de restrição técnica.");
        }
        
        return $data;
    }

    /**
     * Busca se o CPF/CNPJ possui restrição técnica
     *
     * @param string $cpfCnpj
     * @return bool
     */
    public function possuiRestricaoTenica(string $cpfCnpj): bool
    {
        $restricaoTecnica = $this->restricaoTecnica($cpfCnpj);

        if (!isset($restricaoTecnica['restricao']) || !is_bool($restricaoTecnica['restricao'])) {
            throw new Exception("[ESSCR] Não foi possível consultar a situação de restrição técnica.");
        }

        return $restricaoTecnica['restricao'];
    }
}
