# from datetime import  datetime

# from firebase_admin import firestore

# from functions.CloudStorage import upload_blob
# import json
# from typing import  Union
# import tempfile
# import os
# import shutil
# import json
# from etsy.EtsyOauth import base_url, etsySession
# from requests_oauthlib import OAuth1Session
# from Errors.ErrorHandler import API_Error
# from shopifyAPI.ShopifyAuth import shopifyAuth
# import requests
# from initFirebase import fs
# from wooCommerceAPI import WooCreds, WooProducts
# from shopifyAPI.ShopifyListings import convertListing


# def generate_variants(platformId:str,variants:list, listing_id=None, v_id =None):
#     if platformId  == "1":
#         formatted_variants =  []
#         size_property_id = 513
#         color_property_id = 514
#         mappings = {}
#         for variant in variants:
#             size =  variant.get("size")
#             color = variant.get("color")
#             mapping = variant.get("mapping")
#             variant = dict(
#                 # sku = variant.get("sku"),
#                 property_values = [
#                     dict(
#                         property_id = size_property_id,
#                         property_name = "Size",
#                         display_name="Size",
#                         values = [size]
#                     ),
#                     dict(
#                         property_id = color_property_id,
#                         property_name = "Primary Color",
#                         display_name = "Primary Color",
#                         values = [color]
#                     )
#                     ],
#                 offerings = [dict(price=float(variant.get("price")), quantity=variant.get("quantity"))]
#             )
#             mappings[f"{size}{color}".replace(" ", "")] = mapping
#             formatted_variants.append(variant)
#         return (dict(listing_id=int(listing_id), products = json.dumps(formatted_variants), price_on_property=[513]), mappings)
#     elif platformId == "2":
#         formatted_variants = []
#         colors = []
#         sizes = []
#         mappings = {}
#         for variant in variants:
#             mapping = variant.get("mapping")
#             size =  variant.get("size", "")
#             color = variant.get("color")
#             sku = variant.get("sku")
#             formatted_variants.append(dict(
#                 option1 = color,
#                 option2 = size,
#                 price = variant.get("price"),
#                 sku=sku
#             ))
#             colors.append(color)
#             sizes.append(size)
#             mappings[str(sku)] = mapping
#         options = [
#             dict(
#                 name="Color",
#                 values=colors
#             ),
#             dict(
#                 name="Size",
#                 values=sizes
#             )
#         ]
#         return (dict(variants=formatted_variants,options=options), mappings)
#     elif platformId == "3":
#         colors =[]
#         sizes = []
#         mappings = {}
#         formatted_variants = []
#         for variant in variants:
#             color = variant.get("color")
#             size = variant.get("size")
#             sku = f"{size}-{color}"
#             mapping = variant.get("mapping")
#             mappings[str(sku)] = mapping
#             colors.append(color)
#             sizes.append(size)
#             formatted_variants.append(dict(
#                 regular_price=str(variant.get("price")),
#                 sku=variant.get("sku", sku),
#                 attributes = [
#                     dict(
#                         name="Size",
#                         variation=True,
#                         option=size,
#                     ),
#                      dict(
#                         name="Color",
#                         variation=True,
#                         option=color,
#                     )
#                 ]
#             ))
#         attributes = [dict(
#                 name="Size",
#                 variation=True,
#                 options=sizes
#             ),
#             dict(
#                 name="Color",
#                 variation=True,
#                 options=colors
#             )]       
#         return (attributes, mappings, formatted_variants)
#     elif platformId == "0":
#         formatted_variants = []
#         mappings = {}
#         for variant in variants:
#             color = variant.get("color")
#             size = variant.get("size")
#             variant_id = f"{listing_id}{variants.index(variant)}"
#             mappings[variant.get("sku") if v_id else variant_id] = variant.get("mapping")
#             formatted_variant = dict(
#                 sku = variant.get("sku"),
#                 variant_id=variant.get("sku") if v_id else variant_id,
#                 variation_properties = [
#                     dict(
#                         property_id = 1,
#                         property_name = "Size",
#                         values = [size]
#                     ),
#                     dict(
#                         property_id = 2,
#                         property_name = "Color",
#                         values = [color]
#                     ), 
#                 ],
#                 price_raw = variant.get("price"),
#                 price_currency = None,
#                 quantity_available = None
#             )
#             formatted_variants.append(formatted_variant)
#         return (formatted_variants, mappings)


# def post_listing(listing:dict):
#     responses = []
#     try:
#         shipping_template_ids = listing.get("selectedTemplates", {})
#         category = listing.get("selectedCategories", {})
#         selectedBlankNicknames = listing.get("selectedBalnkNicknames", {})
#         printOnDemand = listing.get("printOnDemand", True)
#         variants = listing.get("variations", [])
#         uid = listing.get("uid")
#         variants, blankProductIds = gen_variants(variants, selectedBlankNicknames, 0)
#         listing = listing.get("listingDetails")
#         title = listing.get("title")
#         description = listing.get('description')
#         quantity = listing.get('quantity', 500)
#         tags = listing.get('tags', [])
#         who_made = "i_did"
#         is_supply = False
#         when_made = "made_to_order"
#         recipient = listing.get("recipient")
#         occasion = listing.get("occasion")
#         style = listing.get("style")
#         state = listing.get("state", "active")
#         images =listing.get("avatars",[])
#         images = [dict(src=image.get("url"), primary=image.get("primary", False), name = image.get("name")) for image in images]
#         currency=listing.get("currency", "USD")
#         path, image_paths = etsy_images(images)
#         uploaded_images = upload_listing_image(uid, image_paths)
#         listingsMapping = dict(
#             printOnDemand=printOnDemand,
#             blankProductIds=blankProductIds,
#         )
#         for shop in shops:
#             provider = shop.get("platformId", "1")
#             shopId = shop.get("id")
#             price= min([float(variant.get("price")) for variant in variants])
#             try:
#                 if provider == "ETSY":
#                     response = etsy_listing(
#                         uid=uid,
#                         shop_id=shop_id,
#                         title=title,
#                         description=description,
#                         price=price,
#                         quantity=quantity,
#                         taxonomy_id=category.get(str(shop_id), 374),
#                         tags=tags,
#                         who_made=who_made,
#                         is_supply=is_supply,
#                         when_made=when_made,
#                         recipient=recipient,
#                         occasion=occasion,
#                         style=style,
#                         state=state,
#                         variants = variants,
#                         shipping_template_id = shipping_template_ids.get(str(shop_id), 1),
#                         images=image_paths,
#                         listingsMapping=listingsMapping
#                     )
#                 elif provider == "SHOPIFY":
#                     response = shopify_listing(
#                     uid= uid,
#                     shop_id=shop_id,
#                     title=title,
#                     description=description,
#                     status=True,
#                     tags=tags,
#                     variants=variants,
#                     images=uploaded_images,
#                     listingsMapping=listingsMapping
#                     )
#                 elif provider == "WOOCOMMERCE":
#                     response = woo_listing(
#                         uid=uid,
#                         title=title,
#                         shop_id=shop_id,
#                         description=description,
#                         regular_price=price,
#                         categories=[],
#                         images=uploaded_images,
#                         variants=variants,
#                         listingsMapping=listingsMapping
#                     )
#                 else:
#                     response = riverr_listing(
#                         uid=uid,
#                         shop_id=shop_id,
#                         title=title,
#                         description=description,
#                         images=image_paths,
#                         tags=tags,
#                         variants=variants,
#                         views=0,
#                         currency=currency,
#                         listingsMapping=listingsMapping
#                     )
#             except (API_Error, Exception) as e:
#                 response = e.to_dict() if type(e) == API_Error else dict(message=str(e), status_code = 400, listing_id = None)
#             responses.append(response)
#         shutil.rmtree(path)
#         return (responses, 201)
#     except API_Error as e:
#         return ([e.to_dict()], e.status_code)


# def etsy_listing(uid:str, shop_id:str, title:str, description:str, price:float, quantity:int, taxonomy_id:int, tags:list, who_made:str, is_supply:bool,
#      when_made:str, recipient: str, occasion: str, style:str, state: str,variants:list,  shipping_template_id=139002725493, images = [],listingsMapping = {} ) -> dict:
#     oauth = etsySession(uid, shop_id)
#     url = base_url()
#     listings_url  = f"{url}/listings"
#     # shipping_t = create_shipping_templates(oauth, title, origin_country_id, primary_shipping_cost,secondary_shipping_cost, min_processing_days, max_processing_days)
#     listing = dict(
#         title=title,
#         description=description,
#         price=price,
#         quantity=quantity, 
#         taxonomy_id=int(taxonomy_id),
#         tags=",".join(tags),
#         who_made="i_did",
#         is_supply=False,
#         when_made="made_to_order",
#         recipient="not_specified",
#         # occasion=occasion,
#         # style="".join(style) if style else "",
#         state=state,
#         shipping_template_id= int(shipping_template_id)
#     )
#     request = oauth.post(listings_url, params=listing)
#     if request.status_code == 201:
#         listing = request.json().get("results")[0]
#         listing_id = str(listing.get('listing_id'))
#         variants, mappings = generate_variants("ETSY", variants, listing_id)
#         inventory_request = oauth.put(f"{listings_url}/{listing_id}/inventory", data = variants)
#         if inventory_request.status_code != 200:
#             deletedRequest = oauth.delete(f"{listings_url}/{listing_id}")
#             raise API_Error("Failed updating variants.", 400, meta= dict(message = inventory_request.text, deleteMessagae = deletedRequest.text))

#         uploads = []
#         imaged = False
#         rank = 1
#         for image in images:
#             with open(image.get("image"), 'rb') as f:
#                 files = {"image": f}
#                 image_request = oauth.post(f"{listings_url}/{listing_id}/images", files = files, params={"rank":rank})
#                 if image_request.status_code != 201:
#                     deletedRequest = oauth.delete(f"{listings_url}/{listing_id}")
#                     raise API_Error("Image upload failed. ", 400, meta=dict(message = image_request.text, deleteMessage = deletedRequest.text))
#                 rank += 1
#             imaged = True
#         uploads.append(request.status_code)
#         if inventory_request.status_code == 200 and imaged:
#             listingRef = fs.collection("users").document(uid).collection("etsyListings").document(str(listing_id))
#             mappingRef = fs.collection("users").document(uid).collection("ListingsMapping").document(str(listing_id))
#             listing['images'] = oauth.get(f"{listings_url}/{listing_id}/images").json().get("results")
#             etsy_variants = inventory_request.json().get("results", {}).get("products", [])
#             new_variants = []
#             variantsMapping = {}
#             images = []

#             for variant in etsy_variants:
#                 variant_id  = variant.get("product_id")
#                 variation_properties= variant.get("property_values", [])
#                 size = None
#                 color = None
#                 for v in variation_properties:
#                     id = int(v.get("property_id"))
#                     if id == 513:
#                         values = v.get("values")
#                         size = values[0] if len(values)>0 else None
#                     elif id == 514:
#                         values = v.get("values")
#                         color = values[0] if len(values)>0 else None
#                 sku = f"{size}{color}".replace(" ", "")
#                 mapping = mappings[sku]
#                 variantsMapping[str(variant_id)] = mapping
#                 images.append(mapping.get("image"))
#                 variant = dict(
#                     variant_id = variant_id,
#                     variation_properties=variation_properties,
#                     sku  = variant.get("sku"),
#                 )
#                 new_variants.append(variant)
#             getPrintingImages(uid, listing_id, images)
#             listingsMapping["variantsMapping"] = variantsMapping
#             listing['variants'] = new_variants
#             listing['provider'] =  "ETSY"
#             listing['createdAt'] =  datetime.now()
#             listing['shop_id'] = shop_id
#             listingRef.set(listing)
#             mappingRef.set(listingsMapping)
#             return dict(
#                 status_code = request.status_code,
#                 message=f"Listing added to Etsy shop {shop_id}.",
#                 listing_id = listing_id
#             )
#         raise API_Error(inventory_request.text, inventory_request.status_code)
#     raise API_Error(request.text, request.status_code)
        
        
# def shopify_listing(uid, shop_id, title:str, description:str , status:bool,tags:list, variants = [],images = [],listingsMapping={}):
#     shop = shopifyAuth(uid, shop_id)
#     shop_url = shop.get("shopName")
#     listing_url = f"{shop_url}/admin/api/2021-04/products.json"
#     headers = {'X-Shopify-Access-Token': shop['access_token'], "Content-Type": "application/json"}
#     variants, mappings= generate_variants("SHOPIFY", variants)
#     product = dict(
#         title=title,
#         body_html = description,
#         published = status ,
#         tags=tags,
#         images = [dict(src = image) for image in images]
#     )
#     product.update(variants)
#     request = requests.post(listing_url,data=json.dumps(dict(product=product)),  headers=headers)
#     if request.status_code == 201:
#         listing = request.json().get("product")
#         converted_listing = convertListing(listing, shop_id)
#         variants = converted_listing.get("variants", [])
#         listing_id = str(converted_listing.get("listing_id"))
#         variantsMapping = {}
#         images = []

#         for variant in variants:
#             sku = variant.get('sku')
#             mapping = mappings[str(sku)]
#             variantsMapping[str(variant.get("variant_id"))] = mapping
#             images.append(mapping.get("image"))
#         getPrintingImages(uid, listing_id, images)
#         listingsMapping['variantsMapping'] = variantsMapping
#         userRef = fs.collection("users").document(uid)
#         userRef.collection("etsyListings").document(listing_id).set(converted_listing, merge=True)
#         userRef.collection("ListingsMapping").document(listing_id).set(listingsMapping, merge=True)
#         return dict(
#             status_code =request.status_code,
#             message=f"Listing added to Shopify shop {shop_url}.",
#             listing_id=listing_id
#         )
#     print(request.text, request.status_code)
#     data = request.json()
#     raise API_Error(str(data.get("errors", {}).values()), request.status_code)


# def woo_listing(uid:str, shop_id:str,title:str, description:str, regular_price:float, categories=[dict(name= "Tshirts")], images= [], variants = [], listingsMapping = {}):
#     creds = WooCreds.getWoocommerceShops(uid, shop_id)
#     wooAPI = WooCreds.initWoocommerce(creds.get("shop_url"), creds.get('consumer_key'), creds.get("consumer_secret"))
#     attributes, mappings, formatted_variants = generate_variants("WOOCOMMERCE", variants)
#     data = dict(
#         name=title,
#         regular_price= str(regular_price),
#         description=description,
#         categories=categories,
#         images=[dict(src = image) for image in images],
#         attributes=attributes
#     )
#     request = wooAPI.post("products", data)
#     if request.status_code == 201:
#         listing = request.json()
#         listing_id = listing.get("id")
#         BatchReq = wooAPI.post(f"products/{listing_id}/variations/batch", dict(create=formatted_variants))
#         convertedVariants = WooProducts.convertVariants(wooAPI, listing_id)
#         newListing = WooProducts.convertListing(listing, shop_id, wooAPI, shop_id)
#         variantsMapping = {}
#         images = []
#         if type(convertedVariants) == list:
#             for variant in convertedVariants:
#                 variant_id = variant.get("variant_id")
#                 variation_properties = variant.get("variation_properties",[])
#                 color = None
#                 size = None
#                 for prop in variation_properties:
#                     property_name = prop.get("property_name")
#                     value = prop.get("values")[0]
#                     if property_name == "Color":
#                         color = value
#                     elif property_name == "Size":
#                         size = value
#                 if color and size:
#                     sku = f"{size}-{color}"
#                     thisMapping = mappings[str(sku)]
#                     variantsMapping[str(variant_id)] = thisMapping
#                     images.append(thisMapping.get("image"))
#         listingsMapping['variantsMapping'] = variantsMapping
#         getPrintingImages(uid, listing_id, images)
#         newListing['variants'] = convertedVariants if type(convertedVariants) == list else []
#         newListingId = newListing.get("listing_id")
#         userRef = fs.collection("users").document(uid)
#         userRef.collection("etsyListings").document(newListingId).set(newListing, merge=True)
#         userRef.collection("ListingsMapping").document(newListingId).set(listingsMapping, merge=True)
#         return dict(
#             status_code =request.status_code,
#             message=f"Listing added to WooCommerce shop {shop_id}.",
#             listing_id = newListingId
#         )
#     print(request.text)
#     data = request.json()
#     raise API_Error(data.get("message"), request.status_code)

# def getPrintingImages(uid:str, listing_id:str,images=[]):
#     userRef = fs.collection("users").document(uid)
#     imagesRef = userRef.collection("manualListingImages")
#     for image in images:
#         newImage  = imagesRef.document(image).get().to_dict()
#         userRef.collection("ListingsMapping").document(listing_id).collection('images').document(image).set(newImage, merge=True)


# def riverr_listing(uid, shop_id, title:str, description:str, images:list,tags:list, variants = [],views = 0, currency = "USD", listingsMapping = {},image=None,  listingId =None):
#     creation_tsz = int(datetime.now().timestamp())
#     listing_id = f"{shop_id}{creation_tsz}" if not listingId else listingId
#     variants, mappings  = generate_variants("RIVERR", variants, listing_id, v_id=True if listingId else False)
#     for mapping in mappings.keys():
#         sku = dict(mappings[mapping]).get("sku")
#         verified = verify_SKUs(uid, shop_id, sku)
#         if verified:
#             raise API_Error(f"{sku} is already being used in listing with id: {verified}", 400)
#     images = upload_listing_image(uid, images, listing_id) if not image else [image]
#     listing = dict(
#         createdAt = datetime.now(),
#         creation_tsz = creation_tsz,
#         currency=currency,
#         description=description,
#         images=[dict(
#             url_170x135 = image,
#             url_570xN = image,
#             url_75x75 = image,
#             url_fullxfull = image,
#         ) for image in images],
#         last_modified_tsz =creation_tsz,
#         listing_id = listing_id,
#         provider = "RIVERR",
#         shop_id=shop_id,
#         state="active",
#         tags=tags,
#         title=title,
#         views = views,
#         variants=firestore.ArrayUnion(variants)
#     )
#     userRef = fs.collection("users").document(uid)
#     userRef.collection("etsyListings").document(listing_id).set(listing, merge=True)
#     listingsMapping['variantsMapping'] = mappings
#     images = []
#     for mapping in mappings.keys():
#         images.append(mappings.get(mapping).get("image"))
#     getPrintingImages(uid, listing_id, list(set(list(images))))
#     userRef.collection("ListingsMapping").document(listing_id).set(listingsMapping, merge=True)
#     return dict(
#             status_code =201,
#             message="Listing added to Riverr shop.",
#             listing_id=listing_id
#             )

# def GenerateBlankListing(uid,shop_id, blankProductId,sku, placement = "1"):
#     listingRef = fs.collection("users").document(uid).collection("ListingsMapping").document(blankProductId).get()
#     if listingRef.exists:
#         mappings = listingRef.to_dict()
#         variantsMapping = mappings.get("variantsMapping", {})
#         podata = variantsMapping.get(sku)
#         if podata:
#             listing = fs.collection("users").document(uid).collection("etsyListings").document(blankProductId).get()
#             return (listingRef.id,podata, listing.to_dict(),mappings )
#     colors = []
#     sizes = []
#     newVariants = []
#     blanks = []
#     blankProductRef = fs.collection('public').document(blankProductId).get()
#     variants = blankProductRef.reference.collection("parts").get()
#     blankProduct = blankProductRef.to_dict()
#     listingsMapping = dict(
#             decorationMethod="5",
#             printOnDemand=False,
#             riverrFulfilled=False,
#             blankProductIds=[blankProductId],
#         )
#     variantsMapping = {}
#     for variant in variants:
#         variantId = sku.split('-')[1]
#         if variant.id == variantId:
#             blankVariant = variant.to_dict()
#             ApparelSize = blankVariant.get("ApparelSize", {})
#             price = blankVariant.get("price", 1)
#             if not price or price == 0:
#                 raise API_Error("Variant Pricings are required.", 404)
#             size = str(ApparelSize.get("labelSize", "CUSTOM"))
#             if size.upper() == "CUSTOM":
#                 size = str(ApparelSize.get("customSize", "custom"))
#             sizes.append(size)
#             ColorArray = blankVariant.get("ColorArray", [])
#             Color = {}
#             if len(ColorArray)>0:
#                 Color = ColorArray[0]
#             color = Color.get("colorName", "")
#             colors.append(color)
#             mapping = dict(
#                     blankProduct = blankProductId,
#                     blankVariant = variant.id,
#                     sku = f'{blankProductId}-{variant.id}',
#                     placement = placement
#                 )
#             newVariant = dict(
#                 size= size,
#                 color=color,
#                 mapping = mapping,
#                 price= price,
#                 quantity = 100,
#                 sku = f"{blankProductId}-{variant.id}",
#             )
#             variantsMapping[sku] = mapping
#             blanks.append(blankProductId)
#             newVariants.append(newVariant)
#     listing = riverr_listing(uid,shop_id, blankProduct.get("productName"), blankProduct.get("description"), [],
#     [],newVariants,listingsMapping=listingsMapping,image=blankProduct.get("primaryImageUrl").get("default"), listingId=blankProductId)
#     print(listing)
#     listing = fs.collection("users").document(uid).collection("etsyListings").document(blankProductId).get().to_dict()
#     return (blankProductId, variantsMapping.get(sku), listing,listingsMapping)


# def gen_variants(variants:list, selectedBlankNicknames = {}, price  = 0):
#     colors = []
#     sizes = []
#     newVariants = []
#     blankProductIds = []
#     # selectedBlanks = selectedBlankNicknames.keys()
#     for variant in variants:
#         blankProductId = variant.get("variant", {}).get("productId")
#         blankVariant = variant.get("variant", {}).get("partId")
#         blankRef = fs.collection("blankProducts").document(blankProductId).get()
#         blankVariantRef = blankRef.reference.collection("blankVariants").document(blankVariant).get()
#         blankVariant = blankVariantRef.to_dict()
#         size = blankVariant.get("size")
#         price = variant.get("price", price)
#         if not price or price == 0:
#             raise API_Error("Variant Pricings are required.", 404)
#         size = f"{variant.get('nickName', '')} {size}"
#         sizes.append(size)
#         color = blankVariant.get("color", "")
#         colors.append(color)
#         newVariant = dict(
#             size= size,
#             color=color,
#             mapping = dict(
#                 blankProductId = blankProductId,
#                 blankVariantId = blankVariant,
#                 sku = variant.get("sku"),
#                 image = variant.get("image"),
#                 placement = variant.get("placement")
#             ),
#             price= price,
#             quantity = variant.get("quantity", 100),
#             sku = variant.get("sku"),
#         )
#         blankProductIds.append(blankProductId)
#         newVariants.append(newVariant)
#     return (newVariants, list(set(blankProductIds)))


# def etsy_images(images:list):
#     path = tempfile.mkdtemp()
#     image_paths = []
#     for image in images:
#         src = image.get('src')
#         name = image.get("name")
#         content = requests.get(src).content
#         image_name = f"{path}/{name}"
#         with open(image_name, "wb") as image_file:
#             image_file.write(content)
#             image_paths.append(dict(name=name, image=image_name))
#     return (path, image_paths)

# def upload_listing_image(uid, images, listing_id = None):
#     if listing_id:
#         return [upload_blob(image.get("image"), f"users/{uid}/listings/{listing_id}/{image.get('name')}") for image in images]
#     return [upload_blob(image.get("image"), f"users/{uid}/listings/temp/{image.get('name')}") for image in images]


# def create_shipping_templates(oauth : OAuth1Session,title:str, origin_country_id:int,primary_cost:float,secondary_cost:float, min_processing_days=None, max_processing_days=None, destination_region_id=None, destination_country_id=None) -> Union[dict, int]:
#     url = f"{base_url()}/shipping/templates"
#     request = oauth.post(url, params = dict( 
#         title=title,
#         origin_country_id=origin_country_id,
#         primary_cost=primary_cost,
#         secondary_cost=secondary_cost,
#         max_processing_days=max_processing_days,
#         min_processing_days=min_processing_days,
#         destination_region_id=destination_region_id,
#         destination_country_id=destination_country_id
#     ))
#     if request.status_code == 201:
#         response = request.json()
#         return response['results'][0]
#     raise API_Error(request.text, request.status_code)

# def verify_SKUs(uid, shop_id,SKU):
#     userRef = fs.collection("users").document(uid)
#     listingTrackRef = userRef.collection("shops").document(shop_id).collection("listings").where("SKUs", "array_contains", SKU).get()
#     for document in listingTrackRef:
#         return document.id
#     return False
from configs.firebase import db

def getManualProductMapping(productId, variantId =None):
    ref = db.collection("manualProducts").document(productId).get()
    if ref.exists:
        data = ref.to_dict()
        mapping = data.get('productMapping')
        if variantId:
            return mapping, getManualVariantMapping(productId, variantId)
        return mapping , {}
    return {}, {}

def getManualVariantMapping(productId, variantId):
    ref = db.collection("manualProducts").document(productId).collection("variantsMapping").document(variantId).get()
    if ref.exists:
        return ref.to_dict()
    return {}