# source venv/bin/activate
# sudo systemctl status a_AVTO_TOLOV_oqsmm_bot
# sudo systemctl restart a_AVTO_TOLOV_oqsmm_bot

# sudo systemctl stop a_AVTO_TOLOV_oqsmm_bot
# sudo journalctl -u a_AVTO_TOLOV_oqsmm_bot -f

import re
import asyncio
import requests
from telethon import TelegramClient, events

# --- Telegram API ma'lumotlari ---
api_id = 29219530
api_hash = '8aedd6c7bb5bc2785285d4cc97503d3a'
session_name = 'humo'

# --- Sozlamalar ---
SOURCE_USERNAME = 'HUMOcardbot'  # test uchun
# PHP_ENDPOINT = "https://chest.uz/abbosjon/Osson_smsbot/humo.php"
PHP_ENDPOINT = "https://vmi3055114.contaboserver.net/oqsmm_bot/humo.php"
SECURE_TOKEN = "121212ABBOSchest121212"

# --- Regex ---
AMOUNT_REGEX = re.compile(r'➕\s*([\d\s.,]+)\s*UZS', re.IGNORECASE)
CARD_REGEX = re.compile(r'HUMOCARD\s*\*+(\d{4})', re.IGNORECASE)

# --- Summani float/int ga o‘tkazuvchi funksiya ---
def parse_amount(txt: str):
    s = txt.replace(" ", "")
    if "." in s and "," in s:
        s = s.replace(".", "").replace(",", ".")
    elif "," in s and "." not in s:
        s = s.replace(",", ".")
    try:
        val = float(s)
        return int(round(val))
    except Exception:
        return None

client = TelegramClient(session_name, api_id, api_hash)
SOURCE_ID = None


@client.on(events.NewMessage)
async def handle_message(event):
    global SOURCE_ID

    # Faqat kerakli botdan kelgan xabarlar
    if SOURCE_ID is None or event.sender_id != SOURCE_ID:
        return

    text = event.raw_text or event.message.message or ""
    if not text.strip():
        return

    # Xabarni tahlil qilish
    m_amt = AMOUNT_REGEX.search(text)
    m_card = CARD_REGEX.search(text)
    if not m_amt:
        return

    amount = parse_amount(m_amt.group(1))
    card_last = m_card.group(1) if m_card else "Unknown"

    if not amount:
        # print("❌ Summani parse qilib bo‘lmadi.")
        return

    # print(f"✅ Tushum topildi: {amount} UZS | 💳 *{card_last}")

    # PHP botga GET so‘rov yuborish
    params = {"amount": amount, "card": f"*{card_last}", "token": SECURE_TOKEN}
    loop = asyncio.get_running_loop()
    try:
        resp = await loop.run_in_executor(None, lambda: requests.get(PHP_ENDPOINT, params=params, timeout=8))
        # print(f"📤 PHPga yuborildi: {resp.status_code} | {resp.text[:120]}")
    except Exception as e:
        print(f"⚠️ PHPga ulanishda xato: {e}")


async def main():
    global SOURCE_ID
    await client.start()
    entity = await client.get_entity(SOURCE_USERNAME if SOURCE_USERNAME.startswith('@') else f'@{SOURCE_USERNAME}')
    SOURCE_ID = entity.id
    print(f"🤖 Kuzatuvchi tayyor. Manba: {SOURCE_USERNAME} (id={SOURCE_ID})")
    await client.run_until_disconnected()


if __name__ == "__main__":
    asyncio.run(main())
