import asyncio
import mysql.connector
from telethon import TelegramClient, events

# =====================================
# TELEGRAM CONFIGURATION
# =====================================

API_ID = 36867763
API_HASH = "32ea40eb614430c42aeb7c598b6a1a41"

# Channel Username
CHANNEL = "portalprimevaulty"

# First run will create session.session
SESSION_NAME = "session"

# =====================================
# MYSQL CONFIGURATION
# =====================================

DB_HOST = "s5.whitelabelclouds.com"
DB_NAME = "unitedpr_bots"
DB_USER = "unitedpr_bots"
DB_PASS = "unitedpr_bots"

# =====================================
# DATABASE CONNECTION
# =====================================

db = mysql.connector.connect(
    host=DB_HOST,
    user=DB_USER,
    password=DB_PASS,
    database=DB_NAME
)

cursor = db.cursor()

print("=" * 50)
print(" Telegram Listener Started")
print("=" * 50)

client = TelegramClient(
    SESSION_NAME,
    API_ID,
    API_HASH
)

# =====================================
# SAVE SIGNAL
# =====================================

def save_signal(message_id, raw_signal):

    cursor.execute(
        "SELECT id FROM signals WHERE message_id=%s",
        (message_id,)
    )

    if cursor.fetchone():
        print(f"Duplicate Message {message_id}")
        return

    sql = """
    INSERT INTO signals
    (
        message_id,
        channel_id,
        raw_signal,
        status
    )
    VALUES
    (
        %s,
        %s,
        %s,
        'Pending'
    )
    """

    cursor.execute(
        sql,
        (
            message_id,
            CHANNEL,
            raw_signal
        )
    )

    db.commit()

    print("=" * 50)
    print("NEW SIGNAL RECEIVED")
    print(raw_signal)
    print("=" * 50)


# =====================================
# LISTEN FOR NEW MESSAGES
# =====================================

@client.on(events.NewMessage(chats=CHANNEL))
async def handler(event):

    message = event.raw_text

    save_signal(
        event.message.id,
        message
    )


# =====================================
# MAIN
# =====================================

async def main():

    print("Connecting to Telegram...")

    await client.start()

    me = await client.get_me()

    print("Logged in as:", me.first_name)

    print("Listening to:", CHANNEL)

    print("Waiting for signals...\n")

    await client.run_until_disconnected()


with client:
    client.loop.run_until_complete(main())