from sqlalchemy.orm import Session
from app.db.base import Base, Category, Product, Order, OrderItem, User
from app.db.session import SessionLocal, engine
from app.services.product import product_service
from app.core.logging_config import setup_logging
import logging

setup_logging()
logger = logging.getLogger("commerce_seed")

def seed_database(db: Session):
    """Seed categories and premium titanium/xuping jewelry products."""
    logger.info("Starting database seeding...")

    # 1. Kategori Contoh
    categories_data = [
        {"name": "Cincin", "description": "Koleksi cincin titanium anti karat dan xuping elegan"},
        {"name": "Kalung & Liontin", "description": "Kalung indah dengan berbagai pilihan liontin mewah"},
        {"name": "Gelang", "description": "Gelang rantai dan bangle berkualitas tinggi"},
        {"name": "Anting", "description": "Anting tindik dan klip cantik berlapis emas"}
    ]

    categories = {}
    for cat_info in categories_data:
        slug = product_service._generate_slug(cat_info["name"])
        existing = db.query(Category).filter(Category.slug == slug).first()
        if not existing:
            logger.info(f"Adding category: {cat_info['name']}")
            cat = Category(
                name=cat_info["name"],
                slug=slug,
                description=cat_info["description"]
            )
            db.add(cat)
            db.flush()
            categories[slug] = cat
        else:
            categories[slug] = existing

    db.commit()

    # 2. Produk Perhiasan Contoh (Titanium & Xuping)
    products_data = [
        {
            "name": "Cincin Titanium Classic Gold",
            "description": "Cincin titanium premium dengan polesan halus berlapis emas. Anti karat, anti pudar, dan sangat nyaman dipakai sehari-hari.",
            "price": 125000,
            "stock": 15,
            "material": "titanium",
            "category_slug": "cincin"
        },
        {
            "name": "Kalung Xuping Liontin Permata",
            "description": "Kalung xuping dengan liontin permata zirconia berkilau mewah. Tampilan sangat mirip dengan emas putih asli.",
            "price": 149000,
            "stock": 8,
            "material": "xuping",
            "category_slug": "kalung-liontin"
        },
        {
            "name": "Gelang Rantai Titanium Rose Gold",
            "description": "Gelang rantai titanium warna rose gold dengan aksen manik-manik minimalis. Desain feminin dan elegan.",
            "price": 135000,
            "stock": 10,
            "material": "titanium",
            "category_slug": "gelang"
        },
        {
            "name": "Anting Hoop Xuping Gold 18K",
            "description": "Anting model hoop xuping klasik dengan klip praktis. Warna gold 18 karat yang awet dan tidak menimbulkan alergi.",
            "price": 85000,
            "stock": 20,
            "material": "xuping",
            "category_slug": "anting"
        }
    ]

    for prod_info in products_data:
        slug = product_service._generate_slug(prod_info["name"])
        existing = db.query(Product).filter(Product.slug == slug).first()
        if not existing:
            cat = categories.get(prod_info["category_slug"])
            if cat:
                logger.info(f"Adding product: {prod_info['name']}")
                product = Product(
                    name=prod_info["name"],
                    slug=slug,
                    description=prod_info["description"],
                    price=prod_info["price"],
                    stock=prod_info["stock"],
                    material=prod_info["material"],
                    category_id=cat.id
                )
                db.add(product)
        else:
            logger.info(f"Product already exists: {prod_info['name']}")

    db.commit()
    logger.info("Database seeding completed successfully!")

if __name__ == "__main__":
    db = SessionLocal()
    try:
        seed_database(db)
    finally:
        db.close()
