-- ============================================================
-- Aircrafts ve LogEntries tablolarındaki Registration 
-- alanlarındaki trailing space'leri temizleme scripti
-- ============================================================

-- 1. Önce kontrol et: Hangi kayıtların sonunda boşluk var?
SELECT 
    'Aircrafts' as table_name,
    "ID",
    "Registration",
    LENGTH("Registration") as original_length,
    LENGTH(TRIM(TRAILING FROM "Registration")) as trimmed_length,
    '"' || "Registration" || '"' as registration_with_quotes
FROM "Aircrafts"
WHERE "Registration" != TRIM(TRAILING FROM "Registration")
ORDER BY "ID";

SELECT 
    'LogEntries' as table_name,
    "ID",
    "Registration",
    LENGTH("Registration") as original_length,
    LENGTH(TRIM(TRAILING FROM "Registration")) as trimmed_length,
    '"' || "Registration" || '"' as registration_with_quotes
FROM "LogEntries"
WHERE "Registration" != TRIM(TRAILING FROM "Registration")
ORDER BY "ID";

-- ============================================================
-- 2. Aircrafts tablosunda trailing space'leri temizle
-- ============================================================

-- ÖNEMLİ: Unique constraint'i geçici olarak kaldırıyoruz
-- çünkü PostgreSQL index trailing space'leri normalize ediyor
-- ve UPDATE sırasında duplicate key hatası veriyor.

-- Önce mevcut index adını kontrol et
SELECT 
    indexname,
    indexdef
FROM pg_indexes
WHERE tablename = 'Aircrafts' 
    AND indexname LIKE '%REG%';

BEGIN;

-- 1. Unique constraint'i (index) geçici olarak kaldır
-- Eğer index adı farklıysa yukarıdaki sorgudan kontrol et ve düzelt
DROP INDEX IF EXISTS "REG_UNIQ";

-- 2. Trailing space'leri temizle ve updatedAt'i güncelle
UPDATE "Aircrafts"
SET 
    "Registration" = TRIM(TRAILING FROM "Registration"),
    "updatedAt" = CURRENT_TIMESTAMP
WHERE "Registration" != TRIM(TRAILING FROM "Registration");

-- 3. Güncellenen kayıt sayısını göster
SELECT COUNT(*) as updated_aircrafts_count
FROM "Aircrafts"
WHERE "updatedAt" >= CURRENT_TIMESTAMP - INTERVAL '1 minute';

-- 4. Gerçek duplicate'leri kontrol et (trim edilmiş versiyonlar arasında)
SELECT 
    "Registration",
    COUNT(*) as duplicate_count,
    array_agg("ID" ORDER BY "ID") as ids
FROM "Aircrafts"
GROUP BY "Registration"
HAVING COUNT(*) > 1;

-- Eğer yukarıdaki sorgu sonuç döndürürse, gerçek duplicate kayıtlar var demektir.
-- Bu durumda önce bu kayıtları manuel olarak incelemelisin.

-- 5. Unique constraint'i (index) tekrar ekle
CREATE UNIQUE INDEX "REG_UNIQ" ON "Aircrafts" ("Registration");

COMMIT;

-- ============================================================
-- 3. LogEntries tablosunda trailing space'leri temizle
-- ============================================================

-- LogEntries tablosunda unique constraint yok ama
-- yine de transaction içinde güvenli şekilde güncelleyelim

BEGIN;

-- Trailing space'leri temizle ve updatedAt'i güncelle
UPDATE "LogEntries"
SET 
    "Registration" = TRIM(TRAILING FROM "Registration"),
    "updatedAt" = CURRENT_TIMESTAMP
WHERE "Registration" != TRIM(TRAILING FROM "Registration");

-- Güncellenen kayıt sayısını göster
SELECT COUNT(*) as updated_logentries_count
FROM "LogEntries"
WHERE "updatedAt" >= CURRENT_TIMESTAMP - INTERVAL '1 minute';

COMMIT;

-- ============================================================
-- 4. Son kontrol: Kalan trailing space var mı?
-- ============================================================

SELECT 
    'Aircrafts' as table_name,
    COUNT(*) as remaining_trailing_spaces
FROM "Aircrafts"
WHERE "Registration" != TRIM(TRAILING FROM "Registration");

SELECT 
    'LogEntries' as table_name,
    COUNT(*) as remaining_trailing_spaces
FROM "LogEntries"
WHERE "Registration" != TRIM(TRAILING FROM "Registration");

