"""
Seed script for Rofoof backend.
Run: python manage.py shell < seed/seed_data.py
Or:  python -c "import django; django.setup(); exec(open('seed/seed_data.py').read())"
"""

import os
import sys
from datetime import timedelta
from decimal import Decimal

import django

# Setup Django if not already
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
django.setup()

from django.utils import timezone  # noqa: E402

from apps.content.models import Banner  # noqa: E402
from apps.events.models import Event  # noqa: E402
from apps.products.models import Product  # noqa: E402
from apps.stores.models import Category, PaymentMethod, Store, StoreBranch  # noqa: E402


def seed():
    print("🌱 Seeding Rofoof database...")

    # Categories
    categories_data = [
        {"name_en": "Fashion", "name_ar": "أزياء"},
        {"name_en": "Perfumes", "name_ar": "عطور"},
        {"name_en": "Watches", "name_ar": "ساعات"},
        {"name_en": "Electronics", "name_ar": "إلكترونيات"},
        {"name_en": "Jewels", "name_ar": "مجوهرات"},
        {"name_en": "Appliances", "name_ar": "أجهزة منزلية"},
    ]
    categories = []
    for data in categories_data:
        cat, _ = Category.objects.get_or_create(name_en=data["name_en"], defaults=data)
        categories.append(cat)
    print(f"  ✓ {len(categories)} categories")

    # Payment Methods
    payment_methods_data = ["Visa", "Mastercard", "Apple Pay", "tabby", "tamara"]
    payment_methods = []
    for name in payment_methods_data:
        pm, _ = PaymentMethod.objects.get_or_create(name=name)
        payment_methods.append(pm)
    print(f"  ✓ {len(payment_methods)} payment methods")

    # Stores
    stores_data = [
        {
            "name_en": "Hermes",
            "name_ar": "هيرمس",
            "description_en": "Luxury fashion and accessories since 1837.",
            "description_ar": "أزياء وإكسسوارات فاخرة منذ 1837.",
            "rating": Decimal("4.80"),
            "rating_count": 245,
            "is_top": True,
            "is_recommended": True,
            "local_delivery_days": 2,
            "intl_delivery_days": 7,
            "supports_installments": True,
        },
        {
            "name_en": "DKHOON",
            "name_ar": "دخون",
            "description_en": "Premium Arabian perfumes and oud.",
            "description_ar": "عطور عربية فاخرة وعود.",
            "rating": Decimal("4.60"),
            "rating_count": 189,
            "is_top": True,
            "has_deals": True,
            "local_delivery_days": 1,
        },
        {
            "name_en": "Amazon.ae",
            "name_ar": "أمازون الإمارات",
            "description_en": "Everything store - electronics, fashion, and more.",
            "description_ar": "متجر كل شيء - إلكترونيات وأزياء والمزيد.",
            "rating": Decimal("4.50"),
            "rating_count": 1200,
            "is_top": True,
            "is_recommended": True,
            "is_trending": True,
            "has_deals": True,
            "supports_installments": True,
            "local_delivery_days": 1,
            "intl_delivery_days": 5,
        },
        {
            "name_en": "Noon",
            "name_ar": "نون",
            "description_en": "The Middle East's homegrown marketplace.",
            "description_ar": "سوق الشرق الأوسط المحلي.",
            "rating": Decimal("4.30"),
            "rating_count": 890,
            "is_recommended": True,
            "is_recently_added": True,
            "has_deals": True,
            "local_delivery_days": 1,
        },
        {
            "name_en": "Sephora",
            "name_ar": "سيفورا",
            "description_en": "Beauty and cosmetics retailer.",
            "description_ar": "متجر مستحضرات التجميل والعناية.",
            "rating": Decimal("4.40"),
            "rating_count": 320,
            "is_recently_added": True,
            "local_delivery_days": 2,
        },
    ]

    stores = []
    for data in stores_data:
        store, _ = Store.objects.get_or_create(name_en=data["name_en"], defaults=data)
        stores.append(store)

    # Assign categories
    if stores:
        stores[0].categories.add(categories[0], categories[4])  # Hermes: Fashion, Jewels
        stores[1].categories.add(categories[1])  # DKHOON: Perfumes
        stores[2].categories.add(categories[3], categories[0])  # Amazon: Electronics, Fashion
        stores[3].categories.add(categories[3], categories[5])  # Noon: Electronics, Appliances
        stores[4].categories.add(categories[1])  # Sephora: Perfumes

        # Payment methods
        for store in stores:
            store.payment_methods.add(*payment_methods[:3])  # Visa, MC, Apple Pay
        stores[0].payment_methods.add(payment_methods[3])  # Hermes: + tabby
        stores[2].payment_methods.add(payment_methods[3], payment_methods[4])  # Amazon: + tabby, tamara

    print(f"  ✓ {len(stores)} stores")

    # Store Branches (UAE locations)
    if stores:
        StoreBranch.objects.get_or_create(
            store=stores[0],
            address="The Dubai Mall, Financial Centre Road, Dubai",
            defaults={
                "latitude": Decimal("25.1972"),
                "longitude": Decimal("55.2744"),
                "is_open": True,
                "open_hours": "10:00-22:00",
            },
        )
        StoreBranch.objects.get_or_create(
            store=stores[0],
            address="Mall of the Emirates, Sheikh Zayed Road, Dubai",
            defaults={
                "latitude": Decimal("25.1181"),
                "longitude": Decimal("55.2006"),
                "is_open": True,
                "open_hours": "10:00-22:00",
            },
        )
        StoreBranch.objects.get_or_create(
            store=stores[1],
            address="Yas Mall, Yas Island, Abu Dhabi",
            defaults={
                "latitude": Decimal("24.4889"),
                "longitude": Decimal("54.6078"),
                "is_open": True,
                "open_hours": "10:00-22:00",
            },
        )
        StoreBranch.objects.get_or_create(
            store=stores[4],
            address="City Centre Deira, Dubai",
            defaults={
                "latitude": Decimal("25.2520"),
                "longitude": Decimal("55.3307"),
                "is_open": True,
                "open_hours": "10:00-22:00",
            },
        )
    print("  ✓ Store branches")

    # Products (prices in AED)
    products_data = [
        {"store": stores[0], "name_en": "Birkin Bag 30", "name_ar": "حقيبة بيركن 30", "price": Decimal("45000.00"), "category": categories[0]},
        {"store": stores[0], "name_en": "Silk Scarf", "name_ar": "وشاح حرير", "price": Decimal("2500.00"), "original_price": Decimal("3000.00"), "discount_percent": 17, "category": categories[0]},
        {"store": stores[1], "name_en": "Royal Oud", "name_ar": "عود ملكي", "price": Decimal("850.00"), "category": categories[1]},
        {"store": stores[1], "name_en": "Musk Collection", "name_ar": "مجموعة المسك", "price": Decimal("450.00"), "original_price": Decimal("600.00"), "discount_percent": 25, "category": categories[1]},
        {"store": stores[2], "name_en": "iPhone 15 Pro Max", "name_ar": "آيفون 15 برو ماكس", "price": Decimal("5499.00"), "category": categories[3], "is_featured": True},
        {"store": stores[2], "name_en": "AirPods Pro 2", "name_ar": "إيربودز برو 2", "price": Decimal("899.00"), "original_price": Decimal("1099.00"), "discount_percent": 18, "category": categories[3]},
        {"store": stores[3], "name_en": "Samsung Galaxy S24", "name_ar": "سامسونج جالكسي S24", "price": Decimal("3999.00"), "original_price": Decimal("4499.00"), "discount_percent": 11, "category": categories[3]},
        {"store": stores[4], "name_en": "Dior Sauvage EDP", "name_ar": "ديور سوفاج", "price": Decimal("520.00"), "category": categories[1]},
    ]

    for data in products_data:
        Product.objects.get_or_create(name_en=data["name_en"], store=data["store"], defaults=data)
    print(f"  ✓ {len(products_data)} products")

    # Events (UAE events)
    now = timezone.now()
    events_data = [
        {
            "name_en": "Dubai Shopping Festival 2025",
            "name_ar": "مهرجان دبي للتسوق 2025",
            "description_en": "The biggest shopping event in the UAE with massive discounts.",
            "description_ar": "أكبر حدث تسوق في الإمارات مع خصومات ضخمة.",
            "start_date": now - timedelta(days=10),
            "end_date": now + timedelta(days=50),
            "venue_name": "Dubai Mall",
            "address": "Financial Centre Road, Downtown Dubai",
            "latitude": Decimal("25.1972"),
            "longitude": Decimal("55.2744"),
        },
        {
            "name_en": "Abu Dhabi Shopping Season",
            "name_ar": "موسم أبوظبي للتسوق",
            "description_en": "Exclusive deals across Abu Dhabi's top malls.",
            "description_ar": "عروض حصرية في أفضل مولات أبوظبي.",
            "start_date": now + timedelta(days=5),
            "end_date": now + timedelta(days=35),
            "venue_name": "Yas Mall",
            "address": "Yas Island, Abu Dhabi",
            "latitude": Decimal("24.4889"),
            "longitude": Decimal("54.6078"),
        },
        {
            "name_en": "Sharjah Mega Sale",
            "name_ar": "تخفيضات الشارقة الكبرى",
            "description_en": "Annual sale event across Sharjah shopping centres.",
            "description_ar": "حدث تخفيضات سنوي في مراكز تسوق الشارقة.",
            "start_date": now + timedelta(days=15),
            "end_date": now + timedelta(days=45),
            "venue_name": "Sahara Centre",
            "address": "Al Nahda, Sharjah",
            "latitude": Decimal("25.3150"),
            "longitude": Decimal("55.3900"),
        },
    ]

    events = []
    for data in events_data:
        event, _ = Event.objects.get_or_create(name_en=data["name_en"], defaults=data)
        events.append(event)

    # Add stores to events
    if events and stores:
        events[0].stores.add(stores[0], stores[1], stores[2], stores[4])
        events[1].stores.add(stores[1], stores[2], stores[3])
        events[2].stores.add(stores[3], stores[4])
    print(f"  ✓ {len(events)} events")

    # Banners
    banners_data = [
        {
            "title_en": "Summer Sale - Up to 50% Off",
            "title_ar": "تخفيضات الصيف - خصم حتى 50%",
            "subtitle_en": "Shop the best deals across the UAE",
            "subtitle_ar": "تسوق أفضل العروض في الإمارات",
            "cta_text_en": "Shop Now",
            "cta_text_ar": "تسوق الآن",
            "placement": "home_top",
            "order": 1,
        },
        {
            "title_en": "Pay in 4 with tabby",
            "title_ar": "ادفع على 4 دفعات مع تابي",
            "subtitle_en": "Split your payments interest-free",
            "subtitle_ar": "قسّم مدفوعاتك بدون فوائد",
            "cta_text_en": "Learn More",
            "cta_text_ar": "اعرف المزيد",
            "placement": "tabby",
            "order": 2,
        },
        {
            "title_en": "Electronics 20% Off",
            "title_ar": "خصم 20% على الإلكترونيات",
            "subtitle_en": "Limited time offer on all electronics",
            "subtitle_ar": "عرض لفترة محدودة على جميع الإلكترونيات",
            "cta_text_en": "Browse",
            "cta_text_ar": "تصفح",
            "placement": "electronics_20",
            "order": 3,
        },
        {
            "title_en": "Free Delivery in Dubai",
            "title_ar": "توصيل مجاني في دبي",
            "subtitle_en": "On orders above AED 100",
            "subtitle_ar": "على الطلبات فوق 100 درهم",
            "cta_text_en": "Order Now",
            "cta_text_ar": "اطلب الآن",
            "placement": "general",
            "order": 4,
        },
    ]

    for data in banners_data:
        Banner.objects.get_or_create(title_en=data["title_en"], defaults=data)
    print(f"  ✓ {len(banners_data)} banners")

    print("✅ Seeding complete!")


if __name__ == "__main__":
    seed()
else:
    seed()
