#!/usr/bin/env python3
"""
Generate a URL for testing Telegram Mini App with mock authentication.
This script generates the initData and creates a properly formatted URL
that can be pasted directly into the browser.
"""

import sys
import urllib.parse
from pathlib import Path

# Add parent directory to path to import the generate script
sys.path.insert(0, str(Path(__file__).parent))

from generate_telegram_init_data import main as generate_init_data

def generate_test_url(base_url="http://localhost:5173", **kwargs):
    """Generate a test URL with properly encoded initData in the hash."""
    # Generate the initData
    import io
    from contextlib import redirect_stdout
    
    # Capture the output from generate_init_data
    f = io.StringIO()
    with redirect_stdout(f):
        init_data_dict = generate_init_data(return_dict=True, **kwargs)
    
    init_data = init_data_dict['init_data']
    
    # URL-encode the initData for use in the hash
    encoded_init_data = urllib.parse.quote(init_data, safe='')
    
    # Build the URL
    url = f"{base_url}/#tgWebAppData={encoded_init_data}&tgWebAppVersion=7.0&tgWebAppPlatform=weba"
    
    print("\n" + "="*80)
    print("TELEGRAM MINI APP TEST URL")
    print("="*80)
    print(f"\nPaste this URL into your browser:\n")
    print(url)
    print("\n" + "="*80)
    print("\nWhat this does:")
    print("1. Navigates to the frontend with initData in the URL hash")
    print("2. Frontend extracts and saves initData to localStorage")
    print("3. Session persists across page reloads")
    print("4. To switch users, generate a new URL and paste it")
    print("\nTo clear the session:")
    print("  localStorage.clear(); location.reload();")
    print("="*80 + "\n")
    
    return url

if __name__ == "__main__":
    import argparse
    
    parser = argparse.ArgumentParser(
        description="Generate a test URL for Telegram Mini App mock authentication"
    )
    parser.add_argument("--user-id", type=int, required=True, help="Telegram user ID")
    parser.add_argument("--username", help="Username")
    parser.add_argument("--first-name", help="First name")
    parser.add_argument("--last-name", help="Last name")
    parser.add_argument("--language-code", default="en", help="Language code (default: en)")
    parser.add_argument("--start-param", help="Start parameter (referral code)")
    parser.add_argument("--base-url", default="http://localhost:5173", help="Base URL (default: http://localhost:5173)")
    parser.add_argument("--bot-token", help="Bot token (or set TELEGRAM_BOT_TOKEN env var)")
    
    args = parser.parse_args()
    
    generate_test_url(
        base_url=args.base_url,
        user_id=args.user_id,
        username=args.username,
        first_name=args.first_name,
        last_name=args.last_name,
        language_code=args.language_code,
        start_param=args.start_param,
        bot_token=args.bot_token,
    )
