

import inspect
from dataclasses import dataclass, field

from configs.firebase import DocumentReference, db
from V2.functions.Address.main import Address
from V2.functions.Images.main import Image
from V2.functions.main import DocumentData, validate


@dataclass(kw_only=True)
class BlankVariant(DocumentData):
    color:str
    colorCode:str
    size:str
    blankProductId:str
    description:str
    gtin:str
    images:list[Image]
    style:str
    weight:float
    weightUnit:str

    @classmethod
    def get(cls, blankProductId:str,blankVariantId:str,):
        doc = db.document(f"blankProducts/{blankProductId}/blankVariants/{blankVariantId}").get()
        if doc.exists: return cls.from_dict(doc.to_dict())

    def __post_init__(self):
        self.id = self.id.replace("/", "-")
@dataclass(kw_only=True)
class BlankProduct(DocumentData):
    name:str
    description:str
    brand:str
    blankProductId:str
    public:bool
    style:str
    supplierId:str
    supplierName:str
    primaryImage:str
    categories:list[str]
    images:list[Image]
    tags:list[str]

    @classmethod
    def get(cls, blankProductId:str):
        doc = db.document(f"blankProducts/{blankProductId}").get()
        if doc.exists: return cls.from_dict(doc.to_dict())

    def getBlankVariants(self):
        docs = db.collection(f"blankProducts/{self.id}/blankVariants").get()
        return [BlankVariant.from_dict(doc.to_dict()) for doc in docs]
    
    def save(self, blankVariants:list[BlankVariant]):
        batch = db.batch()
        doc = db.document(f"blankProducts/{self.id}")
        batch.set(doc, self.to_dict())
        # doc.set(self.to_dict())
        for blankVariant in blankVariants:
            doc = db.document(f"blankProducts/{self.id}/blankVariants/{blankVariant.id}")
            batch.set(doc, blankVariant.to_dict())
            # doc.set(blankVariant.to_dict())
        batch.commit()
        return self

