
import os
import re
from pathlib import Path

# --- AYARLAR ---
# Verilerin okunacağı kaynak dosya (py.py ile üretilen dosya)
INPUT_FILE = "PROJE_TAM_DOKUM.txt"

# Dosyaların çıkarılacağı ana dizin 
# (Mevcut dizine çıkarmak için "." kullanın veya "CIKTI_KLASORU" gibi bir isim verin)
OUTPUT_DIR = "." 

def restore_project(input_file, output_root):
    print(f"Proje geri yükleniyor: {input_file} -> {output_root}")
    
    # Çıktı klasörünü Path objesine çevir
    root_path = Path(output_root)

    try:
        # Büyük dosyayı oku
        with open(input_file, "r", encoding="utf-8") as f:
            content = f.read()

        # Ayrıştırıcı Regex (Regular Expression)
        # py.py dosyasındaki şu formata göre arama yapar:
        # \n\n==================== dosya/yolu.py ====================\n
        separator_pattern = re.compile(r'(?m)^={20} (.+?) ={20}$')

        # Tüm dosya başlıklarını bul
        matches = list(separator_pattern.finditer(content))

        if not matches:
            print("Hata: Dosya formatı uygun değil veya hiç dosya bulunamadı.")
            return

        print(f"Toplam {len(matches)} dosya bulundu. Oluşturuluyor...")

        for i, match in enumerate(matches):
            # 1. Dosya yolunu al
            rel_path = match.group(1).strip()
            full_path = root_path / rel_path

            # 2. Dosya içeriğini belirle
            # İçerik, bu başlığın bittiği yerden başlar
            start_idx = match.end()
            if start_idx < len(content) and content[start_idx:start_idx + 2] == "\r\n":
                start_idx += 2
            elif start_idx < len(content) and content[start_idx] in "\r\n":
                start_idx += 1
            
            # İçerik, bir sonraki başlığın başladığı yerde biter
            # Eğer son dosya ise metnin sonuna kadar gider
            if i + 1 < len(matches):
                end_idx = matches[i+1].start()
            else:
                end_idx = len(content)

            file_content = content[start_idx:end_idx]

            # 3. Klasör yapısını oluştur (eğer yoksa)
            if full_path.parent != Path("."):
                os.makedirs(full_path.parent, exist_ok=True)

            # 4. Dosyayı yaz
            try:
                with open(full_path, "w", encoding="utf-8") as out_file:
                    out_file.write(file_content)
                print(f"  + Oluşturuldu: {rel_path}")
            except Exception as e:
                print(f"  ! Yazma Hatası ({rel_path}): {e}")

        print("\nİşlem başarıyla tamamlandı.")

    except FileNotFoundError:
        print(f"Hata: '{input_file}' dosyası bulunamadı. Lütfen dosya adını kontrol edin.")
    except Exception as e:
        print(f"Beklenmeyen bir hata oluştu: {e}")

if __name__ == "__main__":
    restore_project(INPUT_FILE, OUTPUT_DIR)
