<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;

return new class extends Migration
{
    /**
     * Çevrilebilir alanları spatie/laravel-translatable için JSON'a hazırlar:
     * varchar kolonları TEXT'e genişletir ve mevcut düz metin değerleri
     * {"en": "..."} formatına sarar (mevcut içerik İngilizce).
     * (MariaDB hedefi: ALTER..MODIFY + JSON_OBJECT; PostgreSQL desteği kaldırıldı.)
     */
    private array $columns = [
        ['listing_categories', 'name'],
        ['listing_categories', 'description'],
        ['listing_features', 'name'],
        ['listings', 'title'],
        ['listings', 'short_description'],
        ['listings', 'description'],
    ];

    public function up(): void
    {
        // 1) varchar → TEXT (uzun JSON taşıyabilmesi için; diğerleri zaten text)
        foreach ([['listing_categories', 'name'], ['listing_features', 'name'], ['listings', 'title'], ['listings', 'short_description']] as [$table, $col]) {
            DB::statement("ALTER TABLE {$table} MODIFY {$col} TEXT");
        }

        // 2) Mevcut düz metinleri {"en": value} JSON'a sar (zaten JSON olanlara dokunma)
        foreach ($this->columns as [$table, $col]) {
            DB::statement(
                "UPDATE {$table} SET {$col} = JSON_OBJECT('en', {$col})
                 WHERE {$col} IS NOT NULL AND LEFT(TRIM({$col}), 1) <> '{'"
            );
        }
    }

    public function down(): void
    {
        // JSON'dan en değerini geri çıkar
        foreach ($this->columns as [$table, $col]) {
            DB::statement(
                "UPDATE {$table} SET {$col} = JSON_UNQUOTE(JSON_EXTRACT({$col}, '$.en'))
                 WHERE {$col} IS NOT NULL AND LEFT(TRIM({$col}), 1) = '{'"
            );
        }

        foreach ([['listing_categories', 'name'], ['listing_features', 'name'], ['listings', 'title'], ['listings', 'short_description']] as [$table, $col]) {
            DB::statement("ALTER TABLE {$table} MODIFY {$col} VARCHAR(255)");
        }
    }
};
