from sqlalchemy.orm import Session
from app.models.product import Product, ProductVariant

def get_product(db: Session, product_id: int):
    return db.query(Product).filter(Product.id == product_id).first()

def get_products(db: Session, skip: int = 0, limit: int = 100):
    return db.query(Product).offset(skip).limit(limit).all()

def create_product(db: Session, *, product_data: dict):
    product = Product(**product_data)
    db.add(product)
    db.commit()
    db.refresh(product)
    return product

def update_product(db: Session, product: Product, updates: dict):
    for k, v in updates.items():
        setattr(product, k, v)
    db.add(product)
    db.commit()
    db.refresh(product)
    return product

def delete_product(db: Session, product: Product):
    db.delete(product)
    db.commit()
    return True

# Variants
def get_variant(db: Session, variant_id: int):
    return db.query(ProductVariant).filter(ProductVariant.id == variant_id).first()

def get_variants_for_product(db: Session, product_id: int, skip: int = 0, limit: int = 100):
    return db.query(ProductVariant).filter(ProductVariant.product_id == product_id).offset(skip).limit(limit).all()

def create_variant(db: Session, *, variant_data: dict):
    variant = ProductVariant(**variant_data)
    db.add(variant)
    db.commit()
    db.refresh(variant)
    return variant

def update_variant(db: Session, variant: ProductVariant, updates: dict):
    for k, v in updates.items():
        setattr(variant, k, v)
    db.add(variant)
    db.commit()
    db.refresh(variant)
    return variant

def delete_variant(db: Session, variant: ProductVariant):
    db.delete(variant)
    db.commit()
    return True
