<?php

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

return new class extends Migration
{
    /**
     * blog_posts çevrilebilir kolonları → JSON. Düz metin değerler
     * {"en": ...} sarılır, boş string'ler NULL'a çekilir, sonra MODIFY JSON.
     * (title/excerpt varchar(255), content longText olarak yaratılmıştı;
     * önce hepsi LONGTEXT'e genişletilir ki sarma sırasında taşma olmasın.)
     */
    private array $columns = [
        ['blog_posts', 'title'],
        ['blog_posts', 'excerpt'],
        ['blog_posts', 'content'],
    ];

    public function up(): void
    {
        foreach ($this->columns as [$table, $col]) {
            DB::statement("ALTER TABLE {$table} MODIFY {$col} LONGTEXT");
            DB::statement("UPDATE {$table} SET {$col} = NULL WHERE {$col} IS NOT NULL AND TRIM({$col}) = ''");
            DB::statement("UPDATE {$table} SET {$col} = JSON_OBJECT('en', {$col}) WHERE {$col} IS NOT NULL AND LEFT(TRIM({$col}), 1) <> '{'");
            DB::statement("ALTER TABLE {$table} MODIFY {$col} JSON");
        }
    }

    public function down(): void
    {
        // Not: eski sürümdeki varchar(255) geri dönüşü content'i budayarak veri
        // kaybettiriyordu; LONGTEXT'e dönmek kayıpsızdır.
        // Önce MODIFY: kolon JSON'ken (json_valid CHECK) düz metin yazılamaz —
        // CHECK kalktıktan sonra unwrap edilir.
        foreach ($this->columns as [$table, $col]) {
            DB::statement("ALTER TABLE {$table} MODIFY {$col} LONGTEXT");
            DB::statement(
                "UPDATE {$table} SET {$col} = COALESCE(JSON_UNQUOTE(JSON_EXTRACT({$col}, '$.en')), JSON_UNQUOTE(JSON_EXTRACT({$col}, '$.tr'))) WHERE {$col} IS NOT NULL"
            );
        }
    }
};
