#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
PrivexBot Control.ini ONLY Generator
SADECE MEVCUT DOSYALARA BAKIP CONTROL.INI OLUSTURUR
Eksik dosya olusturmaz!
"""

import os
import time
import hashlib
import zipfile
import sys
from datetime import datetime

def calculate_md5_hash(filepath):
    """MD5 hash hesapla - ORJINAL formatla ayni (küçük harf)"""
    if not os.path.exists(filepath):
        return None
    try:
        with open(filepath, 'rb') as f:
            data = f.read()
            return hashlib.md5(data).hexdigest().lower()
    except:
        return None

def get_file_size(filepath):
    """Dosya boyutu"""
    if not os.path.exists(filepath):
        return None
    try:
        return os.path.getsize(filepath)
    except:
        return None

def validate_zip_file(filepath):
    """ZIP dosyası geçerli mi kontrol et"""
    try:
        with zipfile.ZipFile(filepath, 'r') as zip_file:
            result = zip_file.testzip()
            return result is None
    except:
        return False

def scan_game_files(base_path, pattern):
    """Game files'ları tara"""
    game_files = []
    try:
        for filename in os.listdir(base_path):
            if pattern in filename.lower() and filename.endswith('.tbl'):
                game_files.append(filename)
        return sorted(game_files)
    except:
        return []

def generate_control_ini_only(base_path=None):
    """
    SADECE MEVCUT DOSYALARA BAKIP Control.ini oluştur
    Eksik dosya oluşturmaz!
    """
    if base_path is None:
        base_path = os.path.dirname(os.path.abspath(__file__))

    print(f"🔧 PrivexBot Control.ini ONLY Generator başlatılıyor...")
    print(f"📁 Klasör: {base_path}")
    print(f"⚠️  NOT: Eksik dosya oluşturulmayacak, sadece mevcut dosyalar kullanılacak!")

    if not os.path.exists(base_path):
        print(f"❌ Klasör bulunamadı: {base_path}")
        return False

    files = {
        'RTL': 'RTL.zip',
        'RESOURCES': 'Resources.zip',
        'OTP': 'OTP.zip',
        'LOADER': 'PrivexUS_ST_Loader.exe',
        'STEPHAN': 'Stephan.slv',
        'DAMON': 'Damon.slv',
        'RICHARD': 'Richard.slv',
        'COREUS': 'US_Core.us',
        'COREST': 'ST_Core.st',
	'USGameFiles': 'UIs_us.tbl',
	'STGameFiles': 'UIs_st.tbl',
        'JUNKUS': 'US_Junk.us'
    }

    zip_files = ['RTL.zip', 'Resources.zip', 'OTP.zip']

    print("\n📦 Dosyalar taranıyor...")

    found_files = {}
    missing_files = []

    for key, filename in files.items():
        filepath = os.path.join(base_path, filename)

        if os.path.exists(filepath):
            size = get_file_size(filepath)
            hash_val = calculate_md5_hash(filepath)

            if size is not None and hash_val is not None:
                found_files[key] = {
                    'filename': filename,
                    'filepath': filepath,
                    'size': size,
                    'hash': hash_val
                }

                if filename in zip_files:
                    if validate_zip_file(filepath):
                        print(f"   ✅ {filename} - {size} bytes - ZIP OK")
                    else:
                        print(f"   ⚠️  {filename} - {size} bytes - ZIP BOZUK!")
                else:
                    print(f"   ✅ {filename} - {size} bytes")
            else:
                print(f"   ❌ {filename} - Okunamadı!")
                missing_files.append(filename)
        else:
            print(f"   ❌ {filename} - Bulunamadı!")
            missing_files.append(filename)

    us_game_files = scan_game_files(base_path, 'us')
    st_game_files = scan_game_files(base_path, 'st')

    print(f"\n📋 US Game Files bulundu: {len(us_game_files)}")
    for filename in us_game_files:
        filepath = os.path.join(base_path, filename)
        size = get_file_size(filepath)
        print(f"   ✅ {filename} - {size} bytes")

    print(f"\n📋 ST Game Files bulundu: {len(st_game_files)}")
    for filename in st_game_files:
        filepath = os.path.join(base_path, filename)
        size = get_file_size(filepath)
        print(f"   ✅ {filename} - {size} bytes")

    if missing_files:
        print(f"\n⚠️  Eksik dosyalar: {', '.join(missing_files)}")
        print(f"⚠️  Bu dosyalar Control.ini'ye dahil edilmeyecek!")

    timestamp = int(time.time())
    current_date = datetime.now().strftime("%d/%m/%Y")

    print(f"\n📝 Control.ini oluşturuluyor... (Timestamp: {timestamp})")

    content = "[GENERAL]\n"
    content += f"LastUpdate={current_date}\n\n"

    content += "[LASTCONTROL]\n"
    content += f"Value={timestamp}\n\n"

    for key in ['RTL', 'RESOURCES', 'OTP', 'LOADER', 'STEPHAN', 'DAMON', 'RICHARD', 'COREUS', 'COREST','USGameFiles','STGameFiles','JUNKUS']:
        if key in found_files:
            file_info = found_files[key]
            content += f"[{key}]\n"
            content += f"Size={file_info['size']}\n"
            content += f"Hash={file_info['hash']}\n\n"

    if us_game_files:
        content += "[USGameFiles]\n"
        content += f"Count={len(us_game_files)}\n"
        for i, filename in enumerate(us_game_files):
            filepath = os.path.join(base_path, filename)
            size = get_file_size(filepath)
            hash_val = calculate_md5_hash(filepath)

            content += f"FileName{i}={filename}\n"
            content += f"FileSize{i}={size}\n"
            content += f"FileHash{i}={hash_val}\n"
        content += "\n"
    else:
        content += "[USGameFiles]\nCount=0\n\n"

    if st_game_files:
        content += "[STGameFiles]\n"
        content += f"Count={len(st_game_files)}\n"
        for i, filename in enumerate(st_game_files):
            filepath = os.path.join(base_path, filename)
            size = get_file_size(filepath)
            hash_val = calculate_md5_hash(filepath)

            content += f"FileName{i}={filename}\n"
            content += f"FileSize{i}={size}\n"
            content += f"FileHash{i}={hash_val}\n"
        content += "\n"
    else:
        content += "[STGameFiles]\nCount=0\n\n"

    duyurular = [
        "# Soru ve Sorunlar icin Discorddan poyraz_hkc veya Telegramdan poyrazhkc ye mesaj atabilirsiniz !",
        "# PrivexBot'u Etkinlestirmek iin kullanici adi ve sifrenizi onaylatmaniz gerekmektedir !",
        "# Kullanici adi ve sifre onaylatmak iin DC veya Telagram veya WP kontak kurunuz. Whatsapp: 535 553 95 99!"
    ]

    content += "[DUYURU]\n\n"
    content += f"Count={len(duyurular)}\n\n"
    for i, duyuru in enumerate(duyurular):
        content += f"Duyuru{i}={duyuru}\n\n"

    if 'JUNKUS' in found_files:
        file_info = found_files['JUNKUS']
        content += f"[JUNKUS]\n"
        content += f"Size={file_info['size']}\n"
        content += f"Hash={file_info['hash']}\n"

    control_path = os.path.join(base_path, "Control.ini")
    try:
        with open(control_path, 'w', encoding='utf-8') as f:
            f.write(content)
        print(f"✅ Control.ini oluşturuldu: {control_path}")
    except Exception as e:
        print(f"❌ Control.ini oluşturulamadı: {e}")
        return False

    print(f"\n📊 ÖZET:")
    print(f"✅ Bulunan dosyalar: {len(found_files)}")
    print(f"❌ Eksik dosyalar: {len(missing_files)}")
    print(f"📁 US Game Files: {len(us_game_files)}")
    print(f"📁 ST Game Files: {len(st_game_files)}")
    print(f"📝 Control.ini: OLUŞTURULDU")

    print(f"\n🌐 HTTP Test:")
    print(f"curl http://192.168.1.192/Loader/Update/USST/Control.ini")

    return True

def main():
    if len(sys.argv) > 1:
        base_path = sys.argv[1]
    else:
        base_path = None  # Otomatik olarak script'in bulunduğu dizin kullanılacak

    print("🚀 PrivexBot Control.ini ONLY Generator")
    print("=" * 50)
    print("📋 SADECE MEVCUT DOSYALARA BAKIP CONTROL.INI OLUŞTURUR")
    print("⚠️  EKSİK DOSYA OLUŞTURMAZ!")
    print("=" * 50)

    success = generate_control_ini_only(base_path)

    if success:
        print("\n✅ İşlem tamamlandı!")
        print("\n📋 Sonraki adımlar:")
        print("1. Gerçek dosyaları klasöre koy")
        print("2. Generator'ı tekrar çalıştır")
        print("3. Programı test et")
    else:
        print("\n❌ İşlem başarısız!")
        return 1

    return 0

if __name__ == "__main__":
    exit(main())
