<?php

namespace ProxiumWXfrm\Proxium;



class PeticionWSBase {

    protected string $url;
    protected string $data;
    protected array $cabeceras;
    protected string $usuario;
    protected string $clave;

    public function __construct(){
        $this->url='';
        $this->data='';
        $this->usuario='';
        $this->clave='';
        $this->cabeceras=[];
    }

    public function setUrl($url) {
        $this->url=$url;
    }

    public function setData($data) {
        $this->data=$data;
    }

    public function setCabeceras($cabeceras) {
        $this->cabeceras=$cabeceras;
    }

    public function setCredenciales($usuario,$clave) {
        $this->usuario=$usuario;
        $this->clave=$clave;
    }

    public function lanzaGet() {

        $curl = curl_init();

        curl_setopt($curl, CURLOPT_URL, $this->url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HEADER, false);
        
        if($this->usuario && $this->clave) {
            curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
            curl_setopt($curl, CURLOPT_USERPWD,$this->usuario.':'.$this->clave);
        }

        if( isset($this->cabeceras) && is_array($this->cabeceras) && count($this->cabeceras)>0 ) curl_setopt($curl, CURLOPT_HTTPHEADER, $this->cabeceras);
        
        $respuesta_curl = curl_exec($curl);

        curl_close($curl);

        return $respuesta_curl;

    }

    public function lanzaPost($recibirCabeceras=false) {

        $curl = curl_init();

        curl_setopt($curl, CURLOPT_URL, $this->url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HEADER, false);

        

        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $this->data);

        if($recibirCabeceras) curl_setopt($curl, CURLOPT_HEADER, true);

        if($this->usuario && $this->clave) {
            curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
            curl_setopt($curl, CURLOPT_USERPWD,$this->usuario.':'.$this->clave);
        }

        if( isset($this->cabeceras) && is_array($this->cabeceras) && count($this->cabeceras)>0 ) curl_setopt($curl, CURLOPT_HTTPHEADER, $this->cabeceras);

        $respuesta_curl = curl_exec($curl);

        if ($respuesta_curl === false) {
            $errorCode = curl_errno($curl); // Código numérico del error
            $errorMsg = curl_error($curl);  // Mensaje descriptivo del error
            
            echo "Error cURL detectado ({$errorCode}): {$errorMsg}";
        } else {
 
            /*
            $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
            
            if ($httpCode >= 400) {
                echo "Error HTTP devuelto por el servidor: {$httpCode}";
            } else {
                echo "Petición exitosa. Respuesta: " . $response;
            }
            */

        }

		curl_close($curl);

        return $respuesta_curl;

    }

}

?>