"""
Seed the database with an admin user and sample categories.
Run: python seed.py
"""
import asyncio

from sqlalchemy import select

from src.database import AsyncSessionLocal
from src.models.user import User, UserRole
from src.models.category import Category
from src.utils.hashing import hash_password
from slugify import slugify


async def seed():
    async with AsyncSessionLocal() as db:
        result = await db.execute(select(User).where(User.email == "admin@awshta.pk"))
        if not result.scalar_one_or_none():
            admin = User(
                name="Admin",
                email="admin@awshta.pk",
                password=hash_password("Admin@1234"),
                role=UserRole.admin,
                is_active=True,
                is_verified=True,
            )
            db.add(admin)
            print("Created admin user: admin@awshta.pk / Admin@1234")

        categories = [
            ("Electronics", [("Mobile Phones", []), ("Laptops", []), ("Cameras", [])]),
            ("Fashion", [("Men's Clothing", []), ("Women's Clothing", []), ("Shoes", [])]),
            ("Home & Living", [("Furniture", []), ("Kitchen", []), ("Bedding", [])]),
            ("Sports", [("Fitness Equipment", []), ("Outdoor Sports", [])]),
            ("Beauty", [("Skincare", []), ("Makeup", [])]),
        ]

        for cat_name, subcats in categories:
            result = await db.execute(select(Category).where(Category.slug == slugify(cat_name)))
            parent = result.scalar_one_or_none()
            if not parent:
                parent = Category(name=cat_name, slug=slugify(cat_name))
                db.add(parent)
                await db.flush()
                print(f"Created category: {cat_name}")

            for sub_name, _ in subcats:
                result = await db.execute(select(Category).where(Category.slug == slugify(sub_name)))
                if not result.scalar_one_or_none():
                    db.add(Category(name=sub_name, slug=slugify(sub_name), parent_id=parent.id))
                    print(f"  Created subcategory: {sub_name}")

        await db.commit()
        print("\nSeed complete.")


if __name__ == "__main__":
    asyncio.run(seed())
