<?php
// /var/www/html/terrapro/afip/AfipWsfe.php

require_once __DIR__ . '/AfipWsaa.php';

class AfipWsfe
{
    protected $config;
    protected $client;
    protected $auth;

    public function __construct(array $config)
    {
        $this->config = $config;

        // Obtener TA (Token & Sign) desde WSAA
        $wsaa = new AfipWsaa($config);
        $ta   = $wsaa->getTA();

        if (!$ta || !isset($ta->credentials)) {
            throw new \RuntimeException('No se pudo obtener el TA (credenciales vacías)');
        }

        $token = (string)$ta->credentials->token;
        $sign  = (string)$ta->credentials->sign;
        $cuit  = $config['cuit'];

        if ($token === '' || $sign === '') {
            throw new \RuntimeException('Token o Sign vacíos en el TA');
        }

        $this->auth = [
            'Token' => $token,
            'Sign'  => $sign,
            'Cuit'  => (float)$cuit,
        ];

        $wsfeWsdl = $this->getWsfeWsdl();

        $this->client = new SoapClient($wsfeWsdl, [
            'soap_version' => SOAP_1_1,
            'location'     => str_replace('?WSDL', '', $wsfeWsdl),
            'trace'        => 1,
            'exceptions'   => true,
        ]);
    }

    protected function getWsfeWsdl()
    {
        if ($this->config['modo'] === 'PROD') {
            return $this->config['wsfe_wsdl_prod'];
        }
        return $this->config['wsfe_wsdl_homo'];
    }

    /**
     * Llama a FECompUltimoAutorizado para probar la conexión.
     */
    public function FECompUltimoAutorizado($ptoVta, $cbteTipo)
    {
        $params = [
            'Auth'    => $this->auth,
            'PtoVta'  => (int)$ptoVta,
            'CbteTipo'=> (int)$cbteTipo,
        ];

        $res = $this->client->FECompUltimoAutorizado($params);

        if (!isset($res->FECompUltimoAutorizadoResult)) {
            throw new \RuntimeException('Respuesta inesperada de FECompUltimoAutorizado');
        }

        return $res->FECompUltimoAutorizadoResult;
    }

    /**
     * Método que después usaremos desde factura_arca_procesar.php
     * para pedir el CAE real (lo dejamos preparado).
     */
    public function FECAESolicitar(array $cmp)
    {
        $params = [
            'Auth' => $this->auth,
            'FeCAEReq' => [
                'FeCabReq' => [
                    'CantReg' => 1,
                    'PtoVta'  => (int)$cmp['PtoVta'],
                    'CbteTipo'=> (int)$cmp['CbteTipo'],
                ],
                'FeDetReq' => [
                    'FECAEDetRequest' => [
                        0 => $cmp['Detalle']
                    ]
                ]
            ]
        ];

        $res = $this->client->FECAESolicitar($params);

        if (!isset($res->FECAESolicitarResult)) {
            throw new \RuntimeException('Respuesta inesperada de FECAESolicitar');
        }

        return $res->FECAESolicitarResult;
    }
}
