<?php

class ImageUploader {

    // Resmi Yükle ve Filigran Ekle
    public static function uploadAndWatermark($file, $targetDir, $siteName = "EMLAK") {
        
        $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
        $validExt = ['jpg', 'jpeg', 'png', 'webp'];

        if (!in_array($ext, $validExt)) {
            return false; // Geçersiz dosya türü
        }

        $newFileName = time() . '-' . rand(1000, 9999) . '.' . $ext;
        $targetFile = $targetDir . $newFileName;
        $dbPath = 'assets/uploads/' . $newFileName;

        // --- GÜVENLİK KONTROLÜ: GD Kütüphanesi Yüklü mü? ---
        if (!extension_loaded('gd') || !function_exists('imagecreatefromjpeg')) {
            // GD yoksa normal yükleme yap (Site çökmesin)
            if (move_uploaded_file($file['tmp_name'], $targetFile)) {
                return $dbPath;
            }
            return false;
        }
        // ----------------------------------------------------

        // 2. Resmi PHP Hafızasına Al
        $image = null;
        switch ($ext) {
            case 'jpeg':
            case 'jpg':
                $image = @imagecreatefromjpeg($file['tmp_name']);
                break;
            case 'png':
                $image = @imagecreatefrompng($file['tmp_name']);
                break;
            case 'webp':
                $image = @imagecreatefromwebp($file['tmp_name']);
                break;
        }

        // Eğer resim bozuksa veya açılamadıysa normal yükle
        if (!$image) {
            if (move_uploaded_file($file['tmp_name'], $targetFile)) {
                return $dbPath;
            }
            return false;
        }

        // 3. Filigran Rengini Ayarla
        $white = imagecolorallocate($image, 255, 255, 255);
        $black = imagecolorallocatealpha($image, 0, 0, 0, 80);

        // 4. Yazı Ayarları
        $text = mb_strtoupper($siteName, 'UTF-8'); // Türkçe karakter desteği için
        // Eğer mb_strtoupper çalışmazsa: $text = strtoupper($siteName);
        
        $width = imagesx($image);
        $height = imagesy($image);
        
        // Yazı boyutu (Resim genişliğine göre dinamik ayarla)
        // 1 ile 5 arası değer alır (GD fontları sınırlıdır)
        $fontSize = ($width > 1000) ? 5 : 4; 
        
        $fontWidth = imagefontwidth($fontSize) * strlen($text);
        $fontHeight = imagefontheight($fontSize);

        // 5. Konum (Sağ Alt)
        $x = $width - $fontWidth - 20;
        $y = $height - $fontHeight - 20;

        // Negatif konuma düşerse düzelt
        if ($x < 0) $x = 0;
        if ($y < 0) $y = 0;

        // 6. Yazıyı Bas
        imagestring($image, $fontSize, $x + 2, $y + 2, $text, $black); // Gölge
        imagestring($image, $fontSize, $x, $y, $text, $white); // Yazı

        // 7. Kaydet
        $result = false;
        switch ($ext) {
            case 'jpeg':
            case 'jpg':
                $result = imagejpeg($image, $targetFile, 85);
                break;
            case 'png':
                // PNG için alpha kanalını koru
                imagealphablending($image, false);
                imagesavealpha($image, true);
                $result = imagepng($image, $targetFile, 8);
                break;
            case 'webp':
                $result = imagewebp($image, $targetFile, 85);
                break;
        }

        imagedestroy($image);

        if ($result) {
            return $dbPath;
        }

        // Eğer filigranlı kaydetme başarısız olursa orijinali yüklemeyi dene
        if (move_uploaded_file($file['tmp_name'], $targetFile)) {
            return $dbPath;
        }

        return false;
    }
}
?>