#!/usr/bin/env python3
"""
send_telegram.py — Minimal Telegram sender used by skill-review and other scripts.

Usage:
  python3 send_telegram.py --env /path/to/.env --message "Your message here"
  echo "Your message" | python3 send_telegram.py --env /path/to/.env

Reads TELEGRAM_BOT_TOKEN and TELEGRAM_CHANNEL_ID from the .env file.
Supports Markdown parse mode. Exits 0 on success or if Telegram is not configured.
"""

import json
import os
import sys
from pathlib import Path
from urllib import request, error


def load_env(path: Path) -> None:
    if not path or not path.exists():
        return
    for line in path.read_text().splitlines():
        line = line.strip()
        if not line or line.startswith("#") or "=" not in line:
            continue
        key, _, val = line.partition("=")
        key = key.strip()
        val = val.strip().strip('"').strip("'")
        if key:
            os.environ.setdefault(key, val)


def parse_args():
    args = sys.argv[1:]
    env_path = None
    message = None

    i = 0
    while i < len(args):
        if args[i] == "--env" and i + 1 < len(args):
            env_path = Path(args[i + 1])
            i += 2
        elif args[i] == "--message" and i + 1 < len(args):
            message = args[i + 1]
            i += 2
        else:
            i += 1

    return env_path, message


def send(token: str, channel: str, text: str) -> bool:
    if not text.strip():
        return True

    payload = json.dumps({
        "chat_id": channel,
        "text": text,
        "parse_mode": "Markdown",
        "disable_web_page_preview": True,
    }).encode()

    req = request.Request(
        f"https://api.telegram.org/bot{token}/sendMessage",
        data=payload,
        headers={"Content-Type": "application/json"},
    )
    try:
        with request.urlopen(req, timeout=15) as resp:
            result = json.loads(resp.read())
            if not result.get("ok"):
                print(f"Telegram error: {result.get('description', result)}", file=sys.stderr)
                return False
            return True
    except error.HTTPError as e:
        body = e.read().decode(errors="replace")
        print(f"Telegram HTTP {e.code}: {body}", file=sys.stderr)
        return False
    except Exception as e:
        print(f"Telegram send failed: {e}", file=sys.stderr)
        return False


def main() -> None:
    env_path, message = parse_args()

    # Default .env location relative to this script
    if env_path is None:
        env_path = Path(__file__).parent.parent / ".env"

    load_env(env_path)

    token = os.environ.get("TELEGRAM_BOT_TOKEN", "")
    channel = os.environ.get("TELEGRAM_CHANNEL_ID", "")

    if not token or not channel:
        # Not configured — exit silently so the skill doesn't fail noisily
        sys.exit(0)

    if message is None:
        message = sys.stdin.read()

    if not send(token, channel, message):
        sys.exit(1)


if __name__ == "__main__":
    main()
