#!/usr/bin/env python3
"""
send_task.py — отправить задание на сервер-реле vprok.ru

Стрим вызывает этот скрипт когда нужно заполнить корзину:
    python3 send_task.py "молоко 1, яйца С1 10шт, йогурт Активиа 4шт"

Формат строки:
    <название товара> <количество>[шт], ...

Примеры:
    python3 send_task.py "молоко 2, хлеб 1, масло сливочное 3шт"
    python3 send_task.py "яйца С1 10, кефир Простоквашино 2шт, сметана 20% 1"
"""

import sys
import re
import json
import urllib.request
import urllib.error

SERVER_URL = "http://185.130.212.192:5000"
API_KEY    = "vprok2024secret"
HEADERS    = {"X-Api-Key": API_KEY, "Content-Type": "application/json"}


def parse_items(raw: str) -> list[dict]:
    """
    Парсит строку вида "молоко 2, яйца С1 10шт, хлеб"
    в список [{"query": "молоко", "qty": 2}, ...]
    """
    items = []
    # Разбиваем по запятой
    parts = [p.strip() for p in raw.split(",") if p.strip()]

    for part in parts:
        # Ищем число в конце (возможно с "шт")
        m = re.search(r'\s+(\d+)\s*шт?\.?$', part, re.IGNORECASE)
        if m:
            qty = int(m.group(1))
            query = part[:m.start()].strip()
        else:
            # Попробуем просто число в конце
            m2 = re.search(r'\s+(\d+)$', part)
            if m2:
                qty = int(m2.group(1))
                query = part[:m2.start()].strip()
            else:
                qty = 1
                query = part.strip()

        if query:
            items.append({"query": query, "qty": qty})

    return items


def send_task(items: list) -> dict:
    """Отправляет задание на сервер. Возвращает ответ сервера."""
    payload = json.dumps({"items": items}).encode("utf-8")
    req = urllib.request.Request(
        f"{SERVER_URL}/task",
        data=payload,
        headers=HEADERS,
        method="POST"
    )
    with urllib.request.urlopen(req, timeout=15) as resp:
        return json.loads(resp.read().decode())


def get_status() -> dict:
    """Получить текущий статус."""
    req = urllib.request.Request(f"{SERVER_URL}/status", headers={"X-Api-Key": API_KEY})
    with urllib.request.urlopen(req, timeout=10) as resp:
        return json.loads(resp.read().decode())


def main():
    if len(sys.argv) < 2:
        print(__doc__)
        sys.exit(1)

    raw = " ".join(sys.argv[1:])
    items = parse_items(raw)

    if not items:
        print("❌ Не удалось распознать товары в строке:", raw)
        sys.exit(1)

    print(f"📋 Распознано {len(items)} товар(ов):")
    for i, item in enumerate(items, 1):
        print(f"   {i}. {item['query']} × {item['qty']}")

    print(f"\n📡 Отправляю на {SERVER_URL}...")
    try:
        result = send_task(items)
        print(f"✅ Задание принято! ID: {result.get('task_id')}, товаров: {result.get('items_count')}")
        print("   Windows клиент заберёт задание в течение 30 секунд.")
    except urllib.error.HTTPError as e:
        print(f"❌ HTTP ошибка: {e.code} — {e.read().decode()}")
        sys.exit(1)
    except urllib.error.URLError as e:
        print(f"❌ Не удалось подключиться к серверу {SERVER_URL}: {e.reason}")
        print("   Проверьте, запущен ли сервер-реле.")
        sys.exit(1)


if __name__ == "__main__":
    main()
