<?php

require_once(DIR_SYSTEM . 'library/log.php');

class Image_validate {

    CONST MAX_SIZE_IMAGE = 512000; //tamanho limite em bytes -> O limite mantem-se os 300Kb => porém aqui vamos aceitar até 500Kb
    CONST MAX_SIZE_IMAGE_CAD = 1024000; //tamanho limite em bytes -> O limite mantem-se os 300Kb => porém aqui vamos aceitar até 1024Kb

    // --- Configurações do ambiente Node.js (AJUSTE ESTES CAMINHOS!) ---
    // Caminho absoluto para o executável Node.js
    CONST NODE_PATH = '/usr/bin/node'; 
    // --- Fim das Configurações do Node.js ---

    private $log = null;

    public function __construct() {

        $this->log = new Log('error.txt');

    }

    public function isValidate($data, $cad = false): bool
    {
        // $caminhoImagemOriginal = isset($data['image']) ? $data['image'] : null;
        // $fullPathImageOriginal = $caminhoImagemOriginal ? DIR_IMAGE . $caminhoImagemOriginal : null;
        // if ($cad) {
        //     $maxSize = self::MAX_SIZE_IMAGE_CAD;
        // } else {
        //     $maxSize = self::MAX_SIZE_IMAGE;
        // }

        // if ($fullPathImageOriginal && !file_exists($fullPathImageOriginal)) {
        //     $dataLog = [
        //         'product_id' => $data['product_id'] ?? 'N/A',
        //         'imagem_original' => $fullPathImageOriginal,
        //         'status' => 'ARQUIVO_NAO_ENCONTRADO',
        //         'mensagem' => 'Arquivo não encontrado (' . $fullPathImageOriginal . ').',
        //     ];
        //     $this->log->write(json_encode($dataLog, JSON_UNESCAPED_UNICODE));

        //     return false;
        // }

        // if ($fullPathImageOriginal && filesize($fullPathImageOriginal) > $maxSize) {
        //     $dataLog = [
        //         'product_id' => $data['product_id'] ?? 'N/A',
        //         'imagem_original' => $fullPathImageOriginal,
        //         'tamanho_bytes' => filesize($fullPathImageOriginal),
        //         'status' => 'IMAGEM_MUITO_GRANDE',
        //         'mensagem' => 'A imagem excedeu o limite de ' . ($maxSize / 1024) . 'KB. Usando imagem padrão.',
        //     ];
        //     $this->log->write(json_encode($dataLog, JSON_UNESCAPED_UNICODE));

        //     return false;
        // }
        
        //codigo comentado para auxilio ao suporte

        return true;
    }

    public function fixImage($pathImage) {
       if (strpos($pathImage, DIR_IMAGE) !== 0 || !file_exists($pathImage)) {
            $message = "Caminho da imagem inválido ou fora do diretório permitido: {$pathImage}";
            $this->log->write(json_encode(['componente' => 'Redimensionador_PHP', 'status' => 'ERRO_SEGURANCA', 'mensagem' => $message], JSON_UNESCAPED_UNICODE));
            return ['status' => 'error', 'message' => $message];
        }

        $escapedImagePath = escapeshellarg($pathImage);

        // Constrói o comando completo para chamar o script Node.js
        // 2>&1 redireciona stdout e stderr para serem capturados pelo PHP
        $command = escapeshellcmd(self::NODE_PATH . ' ' . DIR_SCRIPTS . ' ' . $escapedImagePath . ' 2>&1');

        $output_array = []; // Array para armazenar cada linha da saída do comando
        $status = null;     // Variável para armazenar o código de saída do comando

        // Executa o comando e captura a saída e o status
        exec($command, $output_array, $status);
        $output = implode("\n", $output_array); // Converte o array de linhas para uma única string

        // Registra o resultado detalhado da execução do Node.js no log
        $dataLog = [
            'componente' => 'NodeJs_Redimensionamento',
            'imagem' => $pathImage,
            'comando_executado' => $command,
            'status_execucao_node' => $status, // 0 para sucesso, diferente de 0 para erro
            'saida_node_completa' => $output
        ];
        $this->log->write(json_encode($dataLog, JSON_UNESCAPED_UNICODE));

        // Retorna o resultado para o chamador
        if ($status === 0) {
            // Opcional: Re-verificar o tamanho após o redimensionamento para confirmar
            clearstatcache(); // Limpa o cache de estatísticas de arquivo do PHP
            $newSize = filesize($pathImage);
            $message = "Imagem redimensionada com sucesso. Novo tamanho: " . ($newSize / 1024) . "KB.";
            return ['status' => 'success', 'message' => $message];
        } else {
            $message = "Falha ao redimensionar a imagem. Erro: " . $output;
            return ['status' => 'error', 'message' => $message];
        }

    }

}