from configs.firebase import SERVER_TIMESTAMP, db
from functions.LastUpdated import productsLastUpdated
from functions.Shops import getShops
from functions.Printify.Auth import createHeader, baseUrl
import requests
from functions.Suppliers.BlankProducts import worker
from functions.Products import convertImage, convertProduct, convertProperty, convertVariant, saveProduct
def updateAllProducts(params={}):
    shops = getShops(platformId="6", credentials= True)
    res =  worker(updateShopProducts, shops)
    return str(res)

def updateShopProducts(shop):
    if shop:
        uid= shop.get('uid')
        shopId = shop.get('id')
        accessToken = shop.get('accessToken')
        print(accessToken)
        headers = createHeader(accessToken)
        platformShopId = shop.get('platformShopId')
        productsUrl = f"{baseUrl}shops/{platformShopId}/products.json"
        lastUpdate = productsLastUpdated(shopId)
        currentPage = lastUpdate.get('nextPage')
        print(productsUrl)
        try:
            res = requests.get(productsUrl, headers=headers, params=dict(limit=100, currentPage=currentPage))
            if res.status_code != 200:
                print(res.text, res.status_code, shopId)
                return res.json()
            if res.status_code == 200:
                convertedProducts = []
                products = (res.json().get('data', []))
                for product in products:
                    options = product.get("options", [])
                    values = {str(v.get("id")):{str(value.get("id")): value.get("title") for value in v.get('values')} for v in options}
                    print(values)
                    convertedProducts.append(
                        convertProduct(
                            uid=uid,
                            platformId=shop.get('platformId'),
                            shopId=shopId,
                            enterpriseId=shop.get('enterpriseId'),
                            platformProductId=product.get('id'),
                            name=product.get('title'),
                            description=product.get('description'),
                            createdAt=product.get('created_at'),
                            tags=product.get('tags'),
                            images=[convertImage(
                                url=image.get('src'),
                                primary=image.get('is_default'),
                            )for image in product.get('images', [])],
                            updatedAt=SERVER_TIMESTAMP,
                        ),
                        [convertVariant(
                            id=str(variant.get('id')),
                            sku=variant.get('sku'),
                            deleted=variant.get('is_enabled'),
                            price=product.get("price"),
                            properties=[convertProperty(
                                name=property.get('name'),
                                value=" ".join(values.get(str(property.get('option_id')))),
                            ) for property in variant.get('options', [])],
                        ) for variant in product.get('variants', []) if property.get('values')[0] in variant.get("values")],
                    )
                for product, variants in convertedProducts:
                    saveProduct(product, variants)
        except Exception as e:
            print(e)