import os
from pathlib import Path

# --- AYARLAR ---
PROJECT_DIR = Path(__file__).resolve().parent
OUTPUT_FILE = Path("PROJE_TAM_DOKUM.txt")  # Çıktı dosyasının adı

# Dahil edilecek dosya uzantıları (İsteğe bağlı, boş bırakılırsa hepsi alınır)
EXTENSIONS = {".py" ,".php" ,".html", ".css", ".js", ".json", ".md", ".sql"} # Sadece bu uzantılara sahip dosyalar dahil edilecek

# Hariç tutulacak klasörler veya dosyalar
IGNORE_DIRS = {"__pycache__", ".git", ".idea", ".vscode", "venv312", "env", "vendor"} # Yaygın olarak hariç tutulan klasörler
IGNORE_FILES = {OUTPUT_FILE.name, "py.py", "py2.py", "düzelt.py"} # Bu scriptin kendisi ve çıktı dosyası

def combine_files(root_dir, output_file):
    print(f"Proje birleştiriliyor: {root_dir} -> {output_file}")
    
    try:
        with open(output_file, "w", encoding="utf-8") as outfile:
            # Proje hakkında başlık
            outfile.write(f"PROJE DÖKÜMÜ\n")
            outfile.write(f"Kaynak Dizin: {root_dir}\n")
            outfile.write("="*50 + "\n\n")

            # Klasörleri gez
            for root, dirs, files in os.walk(root_dir):
                # Hariç tutulan klasörleri atla
                dirs[:] = [d for d in dirs if d not in IGNORE_DIRS]
                
                for file in files:
                    if file in IGNORE_FILES:
                        continue
                        
                    file_path = Path(root) / file
                    
                    # Uzantı kontrolü
                    if EXTENSIONS and file_path.suffix not in EXTENSIONS:
                        continue
                        
                    # Dosyayı oku ve yaz
                    try:
                        relative_path = file_path.relative_to(root_dir)
                        separator = f"\n\n{'='*20} {relative_path} {'='*20}\n"
                        outfile.write(separator)
                        
                        with open(file_path, "r", encoding="utf-8", errors="replace") as infile:
                            content = infile.read()
                            outfile.write(content)
                            
                        print(f"  + Eklendi: {relative_path}")
                        
                    except Exception as e:
                        print(f"  ! Hata ({file}): {e}")
                        outfile.write(f"\n[HATA: Dosya okunamadı - {e}]\n")

        print(f"\n İşlem tamamlandı. Tüm kodlar şuraya kaydedildi:\n{output_file.absolute()}")

    except Exception as e:
        print(f"Kritik Hata: {e}")

if __name__ == "__main__":
    combine_files(PROJECT_DIR, OUTPUT_FILE)


import os

def harfleri_duzelt(giris_dosyasi, cikis_dosyasi):
    # Bozuk harf -> gerçek harf eşleşmeleri
    duzeltmeler = {
        "Ä±": "ı",
        "Ä°": "İ",
        "ÅŸ": "ş",
        "Åž": "Ş",
        "ÄŸ": "ğ",
        "Äž": "Ğ",
        "Ã¼": "ü",
        "Ãœ": "Ü",
        "Ã¶": "ö",
        "Ã–": "Ö",
        "Ã§": "ç",
        "Å": "Ş",
        "Ã‡": "Ç",
        "Ã„Â±": "ı",
        "Ã„Â°": "İ",
        "Ãƒâ€¡": "ç",
        "ÃƒÂ¼Ã…Å¸": "ü",
        "Ãƒâ€¦Ã…Â¸": "ş",
        "ÃƒÆ’Ã‚Â¶": "ö",
        "ÃƒÆ’Ã‚Â§": "ç",
        "Ãƒâ€¦Ã…Â¸": "ş",
    }

    try:
        with open(giris_dosyasi, "r", encoding="utf-8") as f:
            satirlar = f.readlines()

        yeni_satirlar = []

        for satir in satirlar:

            # Türkçe karakter düzeltmeleri
            for bozuk, duzgun in duzeltmeler.items():
                satir = satir.replace(bozuk, duzgun)

            yeni_satirlar.append(satir)

        with open(cikis_dosyasi, "w", encoding="utf-8") as f:
            f.writelines(yeni_satirlar)

        print(f"Başarılı! '{giris_dosyasi}' düzeltildi ve '{cikis_dosyasi}' oluşturuldu.")

    except FileNotFoundError:
        print(f"Hata: '{giris_dosyasi}' dosyası bulunamadı.")
    except Exception as e:
        print(f"Bir hata oluştu: {e}")


if __name__ == "__main__":
    giris = "PROJE_TAM_DOKUM.txt"
    cikis = "PROJE_TAM_DOKUM1.txt"

    harfleri_duzelt(giris, cikis)
import os
import re
from pathlib import Path

# --- AYARLAR ---
# Verilerin okunacağı kaynak dosya (py.py ile üretilen dosya)
INPUT_FILE = "PROJE_TAM_DOKUM1.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)
