#!/usr/bin/env python3
"""Step 2: Verify code and generate session string."""
import sys
import os
import json
from dotenv import load_dotenv
from telethon.sync import TelegramClient
from telethon.sessions import StringSession
from telethon import errors

load_dotenv()

if len(sys.argv) < 2:
    print("Usage: python auth_step2_verify.py CODE [2FA_PASSWORD]")
    sys.exit(1)

code = sys.argv[1]
password = sys.argv[2] if len(sys.argv) > 2 else None

api_id = int(os.getenv("TELEGRAM_API_ID"))
api_hash = os.getenv("TELEGRAM_API_HASH")

with open("/home/serv3090/telegram-mcp/.auth_state.json", "r") as f:
    state = json.load(f)

client = TelegramClient(StringSession(state["session"]), api_id, api_hash)
client.connect()

try:
    client.sign_in(state["phone"], code, phone_code_hash=state["phone_code_hash"])
except errors.SessionPasswordNeededError:
    if password:
        client.sign_in(password=password)
    else:
        print("ERROR: Нужен 2FA пароль. Запусти: python auth_step2_verify.py CODE ПАРОЛЬ")
        client.disconnect()
        sys.exit(1)

session_string = StringSession.save(client.session)

# Update .env
env_path = "/home/serv3090/telegram-mcp/.env"
with open(env_path, "r") as f:
    lines = f.readlines()

found = False
for i, line in enumerate(lines):
    if line.startswith("TELEGRAM_SESSION_STRING="):
        lines[i] = f"TELEGRAM_SESSION_STRING={session_string}\n"
        found = True
        break

if not found:
    lines.append(f"TELEGRAM_SESSION_STRING={session_string}\n")

with open(env_path, "w") as f:
    f.writelines(lines)

# Cleanup temp state
os.remove("/home/serv3090/telegram-mcp/.auth_state.json")

me = client.get_me()
print(f"OK: Авторизация успешна! Аккаунт: {me.first_name} (@{me.username or 'no username'})")
print(f"Session string сохранён в .env")
client.disconnect()
