#!/usr/bin/env python3
"""Monitor Circle pressroom for new articles and send to Telegram."""
import json, os, time, re
import requests
from openai import OpenAI

DIR = os.path.dirname(os.path.abspath(__file__))
CFG = json.load(open(os.path.join(DIR, 'config.json')))
SEEN_FILE = os.path.join(DIR, 'seen_circle.json')
BOT = f"https://api.telegram.org/bot{CFG['telegram_bot_token']}"
CHAT_ID = CFG['chat_id']
LLM = OpenAI(base_url='https://openrouter.ai/api/v1', api_key=CFG['openrouter_api_key'])
PRESSROOM_URL = 'https://www.circle.com/pressroom'


def load_seen():
    if os.path.exists(SEEN_FILE):
        return set(json.load(open(SEEN_FILE)))
    return set()


def save_seen(seen):
    with open(SEEN_FILE, 'w') as f:
        json.dump(list(seen), f)


def send_telegram(text):
    if len(text) > 4096:
        text = text[:4090] + '\n...'
    requests.post(f"{BOT}/sendMessage", json={
        'chat_id': CHAT_ID,
        'text': text,
        'parse_mode': 'HTML',
        'disable_web_page_preview': False,
    }, timeout=30)


def translate_kr(text):
    resp = LLM.chat.completions.create(
        model='deepseek/deepseek-chat-v3-0324',
        max_tokens=512,
        messages=[{'role': 'user', 'content': f'다음 영문 뉴스 제목을 자연스러운 한국어로 번역해줘. 번역문만 출력해:\n\n{text}'}],
    )
    return resp.choices[0].message.content


def fetch_pressroom_articles():
    """Scrape article slugs from circle.com/pressroom."""
    resp = requests.get(PRESSROOM_URL, headers={'User-Agent': 'Mozilla/5.0'}, timeout=30)
    resp.raise_for_status()
    slugs = re.findall(r'href=\"(/pressroom/[^\"]+)\"', resp.text)
    return sorted(set(slugs))


def slug_to_title(slug):
    """Convert /pressroom/some-slug to readable title."""
    name = slug.replace('/pressroom/', '')
    return name.replace('-', ' ').title()


def main():
    seen = load_seen()
    articles = fetch_pressroom_articles()
    new_items = []

    for slug in articles:
        if slug in seen:
            continue
        new_items.append(slug)
        seen.add(slug)

    for slug in new_items:
        title = slug_to_title(slug)
        title_kr = translate_kr(title)
        url = f'https://www.circle.com{slug}'

        msg = (
            f"<b>📢 Circle 새 뉴스</b>\n\n"
            f"<b>{title_kr}</b>\n\n"
            f"<a href=\"{url}\">자세히 보기</a>"
        )
        send_telegram(msg)
        time.sleep(1)

    save_seen(seen)

    if new_items:
        print(f"Sent {len(new_items)} new Circle article(s)")
    else:
        print("No new Circle articles")


if __name__ == '__main__':
    main()
