"""Расчёт заказа магазина «Канцтовары» — учебный модуль разделов 03–05."""
import datetime as dt

import requests

FREE_DELIVERY_FROM = 3000
SMS_URL = "https://sms.example.ru/api/send"


def today():
    return dt.date.today()


def discount(total):
    """Скидка 10% на заказ от 5000 ₽ включительно."""
    if total > 5000:
        return round(total * 0.10, 2)
    return 0


def delivery(total, city="Санкт-Петербург"):
    """Доставка бесплатна от 3000 ₽; иначе 300 ₽ по Санкт-Петербургу и 500 ₽ в другие города."""
    if total >= FREE_DELIVERY_FROM:
        return 0
    return 300 if city == "Санкт-Петербург" else 500


def parse_amount(text):
    """Сумма из строки: «1 250,50» → 1250.5. Не число или меньше нуля — ValueError."""
    value = float(text.replace(" ", "").replace(",", "."))
    if value < 0:
        raise ValueError(f"сумма не может быть отрицательной: {text}")
    return value


def order_total(items, city="Санкт-Петербург"):
    """items — список пар (цена, количество). Итог: сумма − скидка + доставка."""
    total = sum(price * qty for price, qty in items)
    return round(total - discount(total) + delivery(total, city), 2)


def wednesday_bonus(total):
    """По средам дополнительная скидка 5%."""
    if today().weekday() == 2:
        return round(total * 0.05, 2)
    return 0


def save_receipt(path, items):
    """Записать чек: строка на товар и итог."""
    lines = [f"{price:.2f} x {qty}" for price, qty in items]
    lines.append(f"Итого: {order_total(items):.2f}")
    path.write_text("\n".join(lines) + "\n", encoding="utf-8")


def send_sms(phone, text):
    """Отправить SMS через внешний сервис. True — сервис принял сообщение."""
    r = requests.post(SMS_URL, json={"phone": phone, "text": text}, timeout=5)
    return r.status_code == 200
