<?php

// Trusted Hosts Pattern - Her ortamda (DDEV dahil) ngrok ve reverse proxy için gerekli
$GLOBALS['TYPO3_CONF_VARS']['SYS']['trustedHostsPattern'] = '.*';
$GLOBALS['TYPO3_CONF_VARS']['BE']['entryPoint'] = '/yonetim';

// DDEV ortamında veritabanı yapılandırması
if (getenv('IS_DDEV_PROJECT') === 'true') {
    // DDEV Mail — dahili Mailpit (http://typo3v13.ddev.site:8025 veya ddev launch -m)
    $GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport'] = 'smtp';
    $GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_server'] = 'localhost:1025';
    $GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_encrypt'] = '';
    $GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_username'] = '';
    $GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_password'] = '';

    // DDEV veritabanı ayarları
    $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'] = array_merge(
        $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'] ?? [],
        [
            'dbname' => 'db',
            'host' => 'db',
            'password' => 'db',
            'port' => 3306,
            'user' => 'db',
        ]
    );
} else {
    // Production - Veritabanı Ayarları (Environment Variables üzerinden)
    $dbHost = getenv('TYPO3_DB_HOST');
    $dbName = getenv('TYPO3_DB_NAME');
    $dbUser = getenv('TYPO3_DB_USER');
    $dbPass = getenv('TYPO3_DB_PASSWORD');
    $dbPort = getenv('TYPO3_DB_PORT') ?: 3306;

    if ($dbHost && $dbName && $dbUser && $dbPass) {
        $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'] = array_merge(
            $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'] ?? [],
            [
                'dbname' => $dbName,
                'host' => $dbHost,
                'password' => $dbPass,
                'port' => $dbPort,
                'user' => $dbUser,
            ]
        );
    }

    // Reverse Proxy Ayarları (Coolify / Traefik / Nginx)
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['reverseProxyIP'] = '*';
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['reverseProxySSL'] = '*';
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['reverseProxyHeaderMultiValue'] = 'first';

    // Backend Cookie Ayarları - Production'da HTTPS kullanılıyorsa true yap
    $useSecureCookies = getenv('TYPO3_COOKIE_SECURE') === 'true' || getenv('TYPO3_COOKIE_SECURE') === '1';
    $GLOBALS['TYPO3_CONF_VARS']['BE']['cookieSameSite'] = 'lax';
    $GLOBALS['TYPO3_CONF_VARS']['BE']['cookieSecure'] = $useSecureCookies;

    // Frontend Cookie Ayarları
    $GLOBALS['TYPO3_CONF_VARS']['FE']['cookieSameSite'] = 'lax';
    $GLOBALS['TYPO3_CONF_VARS']['FE']['cookieSecure'] = $useSecureCookies;

    // Hata Gösterimi
    if (getenv('TYPO3_DISPLAY_ERRORS') === '1') {
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['displayErrors'] = 1;
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask'] = '*';
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['exceptionalErrors'] = 12290;
    }
}

// hCaptcha (EXT:typo3-hcaptcha) - Form spam koruması
// Keys: Backend > Admin Tools > Settings > Extension Configuration > hcaptcha
// veya ortam değişkenleri: HCAPTCHA_PUBLIC_KEY, HCAPTCHA_PRIVATE_KEY
$GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['hcaptcha'] = array_merge(
    $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['hcaptcha'] ?? [],
    [
        'publicKey' => getenv('HCAPTCHA_PUBLIC_KEY') ?: '',
        'privateKey' => getenv('HCAPTCHA_PRIVATE_KEY') ?: '',
    ]
);

// Form rate limiting (isteğe bağlı) - aynı IP için dakikada max form gönderimi
$GLOBALS['TYPO3_CONF_VARS']['FE']['lockIP'] = $GLOBALS['TYPO3_CONF_VARS']['FE']['lockIP'] ?? 4;
$GLOBALS['TYPO3_CONF_VARS']['FE']['lockIPv6'] = $GLOBALS['TYPO3_CONF_VARS']['FE']['lockIPv6'] ?? 4;

// Görsel İşleme ve WebP/AVIF Desteği
$GLOBALS['TYPO3_CONF_VARS']['GFX']['processor'] = 'ImageMagick';
$GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_path'] = '/usr/bin/';
$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] = 'gif,jpg,jpeg,tif,tiff,bmp,pcx,tga,png,pdf,ai,svg,webp,avif';
$GLOBALS['TYPO3_CONF_VARS']['GFX']['jpg_quality'] = 85;
$GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_allowUpscaling'] = false;
$GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_stripColorProfileByDefault'] = true;
$GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_stripColorProfileCommand'] = '-strip';

// Mask Extension — İçerik elemanı yapılandırması
$GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['mask'] = array_merge(
    $GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['mask'] ?? [],
    [
        'loader_identifier' => 'json',
        'json'     => 'EXT:testproject/Configuration/Mask/mask.json',
        'frontend' => 'EXT:testproject/Resources/Private/Templates/Mask/',
        'layouts'  => 'EXT:testproject/Resources/Private/Layouts/Mask/',
        'partials' => 'EXT:testproject/Resources/Private/Partials/Mask/',
        'backend'  => 'EXT:testproject/Resources/Private/Templates/Mask/Backend/',
    ]
);

// ============================================================================
// CACHE FRAMEWORK & PERFORMANCE TUNING
// ============================================================================

// Redis Cache Backend: Hızlı, production-ready cache desteği
$redisCacheConfig = [
    'hostname' => 'redis',      // DDEV redis servisi
    'port' => 6379,
    'database' => 0,
];

// Pages Cache: Redis backend ile başlıca sayfa cache'i
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pages'] = [
    'backend' => \TYPO3\CMS\Core\Cache\Backend\RedisBackend::class,
    'options' => array_merge($redisCacheConfig, [
        'database' => 0,
        'defaultLifetime' => 86400, // 24 saat
    ]),
];

// Pagesection Cache: TypoScript yapılandırma cache'i
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pagesection'] = [
    'backend' => \TYPO3\CMS\Core\Cache\Backend\RedisBackend::class,
    'options' => array_merge($redisCacheConfig, [
        'database' => 1,
        'defaultLifetime' => 86400,
    ]),
];

// Hash Cache: Genel hash tabanlı cache
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['hash'] = [
    'backend' => \TYPO3\CMS\Core\Cache\Backend\RedisBackend::class,
    'options' => array_merge($redisCacheConfig, [
        'database' => 2,
        'defaultLifetime' => 86400,
    ]),
];

// Rootline Cache: Sayfalar hiyerarşisi
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['rootline'] = [
    'backend' => \TYPO3\CMS\Core\Cache\Backend\RedisBackend::class,
    'options' => array_merge($redisCacheConfig, [
        'database' => 3,
        'defaultLifetime' => 2592000, // 30 gün
    ]),
];

// Core Cache: Dosya tabanlı (PhpFrontend gerekli - Redis uyumlu değil)
// $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['core'] varsayılan kalır

// ─────────────────────────────────────────────────────────────────────────────
// Backend Kullanıcı Varsayılan Sayfa İzinleri
// Yeni oluşturulan sayfalarda grup + kullanıcı default yetkileri
// ─────────────────────────────────────────────────────────────────────────────
$GLOBALS['TYPO3_CONF_VARS']['BE']['defaultPermissions'] = [
    'user'       => 'show,edit,delete,new,editcontent',
    'group'      => 'show,edit,new,editcontent',
    'everybody'  => '',
];

// ─────────────────────────────────────────────────────────────────────────────
// FAL (File Abstraction Layer) — Dosya Güvenliği & Yükleme Kısıtlamaları
// ─────────────────────────────────────────────────────────────────────────────

// Tehlikeli dosya uzantılarını engelle (sunucu tarafında çalışabilir dosyalar)
$GLOBALS['TYPO3_CONF_VARS']['BE']['fileDenyPattern'] =
    '\.(php[3-8]?|phtml|pht|phar|shtml|cgi|pl|asp|aspx|htaccess|htpasswd|ini|bat|exe|com|cmd|sh|csh)(\.|$)';

// Maksimum yükleme boyutu (KB) — 25 MB = 25600 KB
$GLOBALS['TYPO3_CONF_VARS']['BE']['maxFileSize'] = 25600;

// fileadmin klasör yolu (varsayılan 'fileadmin/' — sadece özel kurulumda değiştir)
// $GLOBALS['TYPO3_CONF_VARS']['BE']['fileadminDir'] = 'fileadmin/';

// ─────────────────────────────────────────────────────────────────────────────
// LOGGING FRAMEWORK — PSR-3 Log Yapılandırması
// ─────────────────────────────────────────────────────────────────────────────

use Psr\Log\LogLevel;
use TYPO3\CMS\Core\Log\Writer\FileWriter;
use TYPO3\CMS\Core\Log\Writer\DatabaseWriter;
use TYPO3\CMS\Core\Log\Processor\IntrospectionProcessor;
use TYPO3\CMS\Core\Log\Processor\MemoryUsageProcessor;

// Genel: WARNING ve üzeri dosyaya yaz
$GLOBALS['TYPO3_CONF_VARS']['LOG']['writerConfiguration'] = [
    LogLevel::WARNING => [
        FileWriter::class => [
            'logFileInfix' => 'default',
        ],
    ],
];

// ERROR ve üzeri veritabanına da yaz (sys_log tablosu)
$GLOBALS['TYPO3_CONF_VARS']['LOG']['writerConfiguration'][LogLevel::ERROR] = [
    DatabaseWriter::class => [],
];

// Extension-özel: DEBUG ve üzeri (development-friendly)
$GLOBALS['TYPO3_CONF_VARS']['LOG']['Gfdhfhgfgg']['Testproject']['writerConfiguration'] = [
    LogLevel::DEBUG => [
        FileWriter::class => [
            'logFileInfix' => 'testproject',
        ],
    ],
];

// Processor: ERROR seviyesinde dosya/satır + bellek bilgisi ekle
$GLOBALS['TYPO3_CONF_VARS']['LOG']['Gfdhfhgfgg']['Testproject']['processorConfiguration'] = [
    LogLevel::ERROR => [
        IntrospectionProcessor::class => [
            'appendFullBackTrace' => true,
        ],
        MemoryUsageProcessor::class => [
            'formatSize' => true,
        ],
    ],
];

// Deprecation logları: NOTICE seviyesinde
$GLOBALS['TYPO3_CONF_VARS']['LOG']['TYPO3']['CMS']['deprecations']['writerConfiguration'] = [
    LogLevel::NOTICE => [
        FileWriter::class => [
            'logFileInfix' => 'deprecations',
        ],
    ],
];

// PHP hata raporlama (sys_log'a yazılan PHP hataları)
// 0 = kapalı, varsayılan: E_ALL & ~(E_STRICT | E_NOTICE)
$GLOBALS['TYPO3_CONF_VARS']['SYS']['belogErrorReporting'] = 'E_ALL & ~(E_STRICT | E_NOTICE)';

// ─────────────────────────────────────────────────────────────────────────────
// Geliştirme ortamı: Cache'i devre dışı bırak (opsiyonel)
if (getenv('TYPO3_CONTEXT') === 'Development') {
    // Cache'i NullBackend ile değiştir (hızlı geliştirme)
    // $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pages'] = [
    //     'backend' => \TYPO3\CMS\Core\Cache\Backend\NullBackend::class,
    // ];
}
