import shutil
import sys
from pathlib import Path

TARGET = Path("/usr/share/X11/xkb/symbols/capslock")
BACKUP = TARGET.with_suffix(".backup")

# ── Değiştirilecek bloklar (ikisi de aynı işlevi görür) ──────────────────────

OLD_BLOCK_A = """\
// This changes the <CAPS> key to become a Control modifier,
// but it will still produce the Caps_Lock keysym; this is
// useful for apps that need to distinguish it from usual
// Control_L and Control_R.
hidden partial modifier_keys
xkb_symbols "ctrl_modifier" {
    replace key <CAPS> {
        type[Group1] = "ONE_LEVEL",
        symbols[Group1] = [ Caps_Lock ],
        actions[Group1] = [ SetMods(modifiers=Control) ]
    };
    modifier_map Control { <CAPS> };
};\
"""

OLD_BLOCK_B = """\
// This changes the <CAPS> key to become a Control modifier,
// but it will still produce the Caps_Lock keysym.
hidden partial modifier_keys
xkb_symbols "ctrl_modifier" {
    replace key <CAPS> {
        type[Group1] = "ONE_LEVEL",
        symbols[Group1] = [ Caps_Lock ],
        actions[Group1] = [ SetMods(modifiers=Control) ]
    };
    modifier_map Control { <CAPS> };
};\
"""

# ── Yeni blok ─────────────────────────────────────────────────────────────────

NEW_BLOCK = """\
// Bu ayar Caps Lock modifikasyonu aracılığıyla,
// Caps Lock'ın gecikmesiz çalışmasını sağlar. Bu
// değişiklikten sonra sistem ayarlarından "Caps
// Lock tuşunu ek Ctrl değiştirici yap, ancak Caps
// Lock olarak tanımlamayı sürdür" ayarının açılması
// gerekir.
hidden partial modifier_keys
xkb_symbols "ctrl_modifier" {
		  key <CAPS> {
		      type="ALPHABETIC",
		      repeat=No,
		      symbols[Group1]= [ Caps_Lock, Caps_Lock ],
		      actions[Group1]= [ LockMods(modifiers=Lock),
		                         LockMods(modifiers=Shift+Lock,affect=unlock) ]
		  };
};\
"""

# ── Ana işlem ─────────────────────────────────────────────────────────────────

def main() -> None:
    # Dosya var mı?
    if not TARGET.exists():
        print(f"HATA: Hedef dosya bulunamadı: {TARGET}")
        sys.exit(1)

    original = TARGET.read_text(encoding="utf-8")

    # Hangi blok var?
    if OLD_BLOCK_A in original:
        old_block = OLD_BLOCK_A
        print("Varyant A bulundu (uzun yorum satırlı).")
    elif OLD_BLOCK_B in original:
        old_block = OLD_BLOCK_B
        print("Varyant B bulundu (kısa yorum satırlı).")
    else:
        print("HATA: Değiştirilecek ctrl_modifier bloğu dosyada bulunamadı.")
        print("Dosya daha önce yamandı ya da beklenmedik bir içeriğe sahip.")
        sys.exit(1)

    # Yedek oluştur
    shutil.copy2(TARGET, BACKUP)
    print(f"Yedek oluşturuldu: {BACKUP}")

    # Değiştir ve yaz
    patched = original.replace(old_block, NEW_BLOCK, 1)
    TARGET.write_text(patched, encoding="utf-8")
    print(f"Dosya başarıyla güncellendi: {TARGET}")
    print("\nHatırlatma: Değişikliğin etkin olması için sistem ayarlarından")
    print('"Caps Lock tuşunu ek Ctrl değiştirici yap" seçeneğini açmayı unutmayın.')


if __name__ == "__main__":
    main()
