<?php

class Personalizacao
{
    private $connectionmysql;

    public function __construct($connectionmysql)
    {
        $this->connectionmysql = $connectionmysql;
    }

    public function getPreferencias()
    {
        $sql = "SELECT * FROM personaliza_paginas limit 1";

        $stmt = $this->connectionmysql->prepare($sql);
        if (!$stmt) {
            die('Erro na preparação da consulta MySQL: ' . $this->connectionmysql->error);
        }

        if (!$stmt->execute()) {
            die('Erro na execução da consulta MySQL: ' . $stmt->error);
        }

        $result = $stmt->get_result();
        if (!$result) {
            die('Erro ao obter resultado MySQL: ' . $stmt->error);
        }

        $tipos = [];
        while ($row = $result->fetch_assoc()) {
            $tipos[] = $row;
        }

        $stmt->close();
        return $tipos;
    }

    public function uploadImage($file, $destinationFolder) {
        // Verifica se o diretório existe e se é gravável
        if (!is_dir($destinationFolder) || !is_writable($destinationFolder)) {
            return false; // Retorna false em vez de die()
        }

        // Gera um nome único para o arquivo
        $extensao = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
        $nomeUnico = uniqid() . '.' . $extensao;
        $caminhoImagem = $destinationFolder . $nomeUnico;

        // Verifica se o arquivo é uma imagem válida
        $tipoImagem = exif_imagetype($file['tmp_name']);
        $permitidos = [IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF];

        if (!in_array($tipoImagem, $permitidos)) {
            return false;
        }

        // Move o arquivo para o diretório desejado
        if (move_uploaded_file($file['tmp_name'], $caminhoImagem)) {
            return $nomeUnico; // Retorna o nome único do arquivo
        }

        return false; // Retorna false em caso de erro
    }

    public function processFileUpload($fileInputName, $fieldName) {
        if (isset($_FILES[$fileInputName]) && $_FILES[$fileInputName]['error'] == UPLOAD_ERR_OK) {
            $pasta = '../../../assets/images/';

            // Verifica se o diretório existe e é gravável
            if (!is_dir($pasta) || !is_writable($pasta)) {
                return "Erro: Diretório não existe ou não é gravável.";
            }

            // Faz o upload da imagem
            $imagemNome = $this->uploadImage($_FILES[$fileInputName], $pasta);

            if ($imagemNome) {
                // Verifica se já existe algum registro na tabela
                $sqlCheck = "SELECT * FROM personaliza_paginas LIMIT 1";
                $result = $this->connectionmysql->query($sqlCheck);

                if ($result && $result->num_rows > 0) {
                    // Atualiza o registro existente
                    $row = $result->fetch_assoc();

                    // Remove a imagem antiga se existir
                    if (!empty($row[$fieldName]) && file_exists($pasta . $row[$fieldName])) {
                        unlink($pasta . $row[$fieldName]);
                    }

                    // Atualiza apenas o campo específico
                    $sqlUpdate = "UPDATE personaliza_paginas SET $fieldName = '$imagemNome' LIMIT 1";
                    if ($this->connectionmysql->query($sqlUpdate) === TRUE) {
                        return "$fieldName atualizado com sucesso!";
                    } else {
                        return "Erro ao atualizar $fieldName: " . $this->connectionmysql->error;
                    }
                } else {
                    // Cria um array para armazenar os campos e valores
                    $fields = [$fieldName];
                    $values = ["'$imagemNome'"];

                    // Se for a primeira vez, insere um novo registro
                    $sqlInsert = "INSERT INTO personaliza_paginas (" . implode(', ', $fields) . ") VALUES (" . implode(', ', $values) . ")";
                    if ($this->connectionmysql->query($sqlInsert) === TRUE) {
                        return "$fieldName inserido com sucesso!";
                    } else {
                        return "Erro ao inserir $fieldName: " . $this->connectionmysql->error;
                    }
                }
            } else {
                return "Erro ao fazer upload da imagem $fieldName. Certifique-se de que o arquivo é uma imagem válida (JPG, PNG ou GIF).";
            }
        } elseif (isset($_FILES[$fileInputName])) {
            $error = $_FILES[$fileInputName]['error'];
            $errorMessages = [
                UPLOAD_ERR_INI_SIZE => 'O arquivo excede o tamanho máximo permitido.',
                UPLOAD_ERR_FORM_SIZE => 'O arquivo excede o tamanho máximo permitido pelo formulário.',
                UPLOAD_ERR_PARTIAL => 'O upload do arquivo foi feito parcialmente.',
                UPLOAD_ERR_NO_FILE => 'Nenhum arquivo foi enviado.',
                UPLOAD_ERR_NO_TMP_DIR => 'Pasta temporária não encontrada.',
                UPLOAD_ERR_CANT_WRITE => 'Falha ao gravar o arquivo no disco.',
                UPLOAD_ERR_EXTENSION => 'Uma extensão do PHP interrompeu o upload.'
            ];

            $errorMessage = isset($errorMessages[$error]) ? $errorMessages[$error] : 'Erro desconhecido no upload do arquivo.';
            return "Erro no upload do arquivo $fieldName: $errorMessage";
        }
        return "";
    }
}
