#!/usr/bin/env python3
# -*- coding: utf-8 -*-

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

def calculate_md5_hash(filepath):
    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):
    if not os.path.exists(filepath):
        return None
    try:
        return os.path.getsize(filepath)
    except:
        return None

def validate_zip_file(filepath):
    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 = []
    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):
    if base_path is None:
        base_path = os.path.dirname(os.path.abspath(__file__))

    if not os.path.exists(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']

    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
                }
            else:
                missing_files.append(filename)
        else:
            missing_files.append(filename)

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

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

    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 icin kullanici adi ve sifre almaniz gerekmektedir !",
        "# Kullanici adi ve sifre almak icin 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)
    except Exception:
        return False

    return True

def main():
    if len(sys.argv) > 1:
        base_path = sys.argv[1]
    else:
        base_path = None
    success = generate_control_ini_only(base_path)
    if success:
        return 0
    return 1

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