<?php

namespace ProxiumWXfrm\Proxium;

use ProxiumWXfrm\Http\Response;

class Upload {

    public string $rutaArchivo;
    public string $archivo;
    public string $nombreArchivoFinal;
    public string $urlDescarga;
    public string $urlBorrado;
    public string $paramOperacion;
    public string $signature;

    public function __construct(){

        $this->rutaArchivo='';
        $this->archivo='';
        $this->nombreArchivoFinal='';
        $this->urlDescarga='';
        $this->urlBorrado='';
        $this->paramOperacion='';
        $this->signature='';

    }

    public function setRutaArchivo(){

        global $configProxy;

        $this->rutaArchivo='..'.$configProxy['dir_data'].$configProxy['dir_uploads'].'/'.$this->archivo;

    }

    public function getSignature(){

        global $configProxy;

        return sha1($this->archivo.$configProxy['apiKeyAppPrivada'].$this->paramOperacion);

    }

    public function borrarArchivo(){

        $signatureValidar=$this->getSignature();

        if( $this->signature == $signatureValidar ) { //Se comprueba que la firma recibida coincide con la generada en la clase

            if (file_exists($this->rutaArchivo)) {

                unlink($this->rutaArchivo);
                $response=Response::text(RespuestaStandard::data('ok')->getRespuesta());

            }
            else {
                $response=Response::text(RespuestaStandard::error(701,"Archivo no encontrado.")->getRespuesta());
            }
            

        }
        else {
            $response=Response::text(RespuestaStandard::error(700,"Error en la validación de la firma de descarga.")->getRespuesta());
        }

        return $response;

    }

    public function obtenerArchivo(){

        $signatureValidar=$this->getSignature();

        if( $this->signature == $signatureValidar ) { //Se comprueba que la firma recibida coincide con la generada en la clase

            if (file_exists($this->rutaArchivo)) {

                $contenido=base64_encode(file_get_contents($this->rutaArchivo));
                $response=Response::text(RespuestaStandard::data($contenido)->getRespuesta());

                //$response=Response::text('validación ok');
            }
            else {
                $response=Response::text(RespuestaStandard::error(701,"Archivo no encontrado.")->getRespuesta());
            }
            

        }
        else {
            $response=Response::text(RespuestaStandard::error(700,"Error en la validación de la firma de descarga.")->getRespuesta());
        }

        return $response;

    }


    public function subirArchivo($file,$paramOperacion){
        /*
        [name] => gato-1.jpg
        [full_path] => gato-1.jpg
        [type] => image/jpeg
        [tmp_name] => C:\Windows\Temp\php8789.tmp
        [error] => 0
        [size] => 4996
        */
        
        //print_r($file);

        global $rutaPublicacion;
        global $configProxy;

        $subidaOk=false;

        $this->archivo=bin2hex(random_bytes(16));
        $this->setRutaArchivo();

        $temporal=$file['tmp_name'];

        if(move_uploaded_file($temporal,$this->rutaArchivo)) {

            $this->nombreArchivoFinal=$file['name'];
            $fileName=base64_encode($this->nombreArchivoFinal);
            
            $this->paramOperacion=$paramOperacion;
            $params=base64_encode($this->paramOperacion);
            
            $this->urlDescarga=$rutaPublicacion.'/uploadDoc/descarga?id='.$this->archivo.'&file='.urlencode($fileName).'&params='.urlencode($params).'&signature='.$this->getSignature();
            $this->urlBorrado=$rutaPublicacion.'/uploadDoc/borrado?id='.$this->archivo.'&file='.urlencode($fileName).'&params='.urlencode($params).'&signature='.$this->getSignature();

            $this->paramOperacion=$paramOperacion;

            //print_r($this);

            $subidaOk=true;

        }
        
        return $subidaOk;

    }

}

?>