import asyncio
import sys
import os
from datetime import datetime

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

from telethon.sync import TelegramClient
from telethon.sessions import StringSession
from telethon.tl.functions.messages import GetHistoryRequest
from pump_migrations import parse_message, channel_username, api_id, api_hash, string_session

# Create client
client = TelegramClient(StringSession(string_session), api_id, api_hash)

async def test_parsing():
    """
    Fetch the latest messages from the channel and test the parsing logic
    """
    await client.start()
    entity = await client.get_entity(channel_username)

    print(f"📡 Fetching messages from channel: {channel_username}\n")
    print("=" * 80)

    # Fetch last 10 messages
    history = await client(GetHistoryRequest(
        peer=entity,
        offset_id=0,
        offset_date=None,
        add_offset=0,
        limit=10,
        max_id=0,
        min_id=0,
        hash=0
    ))

    messages = history.messages
    parsed_count = 0

    for i, msg in enumerate(messages, 1):
        print(f"\n🔍 Message #{i}")
        print(f"Date: {msg.date}")
        print(f"Text preview: {msg.message[:100] if msg.message else 'No text'}...")
        print("-" * 80)

        # Try to parse the message
        parsed = parse_message(msg)

        if parsed:
            parsed_count += 1
            print("✅ PARSED SUCCESSFULLY!")
            print(f"\n📦 Extracted Data:")
            print(f"  Token Hash:        {parsed['token_hash']}")
            print(f"  Migration Time:    {parsed['migration_started']}")
            print(f"  Creator Hash:      {parsed['creator_hash']}")

            # Show what would be inserted into DB
            print(f"\n💾 Database Row Preview:")
            print(f"  token_address:     {parsed['token_hash']}")
            print(f"  creator:           {parsed['creator_hash'] or 'NULL'}")
            print(f"  pool:              PUMP")

            # Convert datetime to timestamp for DB
            if isinstance(parsed['migration_started'], datetime):
                migrated_timestamp = int(parsed['migration_started'].timestamp())
            else:
                migrated_timestamp = int(datetime.now().timestamp())

            print(f"  migrated:          {migrated_timestamp} ({parsed['migration_started']})")
            print(f"  processed_date:    {int(datetime.now().timestamp())} (current time)")
            print(f"  processed:         0")
            print(f"  quality:           unsorted")
            print(f"  shortName:         (to be fetched from API)")
            print(f"  image:             (to be fetched from API)")
        else:
            print("❌ Not a migration message or failed to parse")

        print("=" * 80)

    print(f"\n📊 Summary:")
    print(f"Total messages fetched: {len(messages)}")
    print(f"Successfully parsed: {parsed_count}")
    print(f"Parsing rate: {parsed_count}/{len(messages)}")

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