from datetime import datetime
from configs.firebase import SERVER_TIMESTAMP, db
from functions.LastUpdated import productsLastUpdated, saveProductsLastUpdated
from functions.Response import API_Error, saveError
import requests
from functions.Shops import getShops
from functions.Shipstation.Auth import Authorization
from functions.Suppliers.BlankProducts import worker
from functions.Products import convertProduct, convertImage, convertProperty, convertVariant, saveProduct

def updateAllProducts(params={}):
    shops = getShops(platformId="5", credentials= True)
    res =  worker(updateShopProducts, shops)
    return str(res)

def updateShopProducts(shop:dict):
    try:
        if shop:
            uid = shop.get('uid')
            enterpriseId = shop.get('enterpriseId')
            shopId  = shop.get('id')
            apiKey = shop.get('apiKey')
            apiSecret = shop.get('apiSecret')
            authorization = Authorization(apiKey, apiSecret)
            lastUpdate = productsLastUpdated(shopId)
            updated_at_min= datetime.fromtimestamp(lastUpdate.get('timestamp')).isoformat()
            products = getProducts(authorization, updated_at_min, uid, shopId)
            updates = []
            for product in products:
                convertedProduct = convertProduct(
                    uid=uid,
                    enterpriseId=enterpriseId,
                    platformProductId=product.get('productId'),
                    platformId="5",
                    shopId=shopId,
                    name=product.get("name"),
                    description="",
                    createdAt=SERVER_TIMESTAMP,
                    updatedAt=SERVER_TIMESTAMP,
                    price=product.get("price"),
                    tags=[t.get("name") for t in product.get("tags", [])],
                )
                updates.append(saveProduct(convertedProduct, []))
            saveProductsLastUpdated(shopId, len(updates))
    except Exception as e:
        print(e)

def getProducts(Authorization, updated_at_min=None, uid=None, shopId=None):
    url = f"https://ssapi.shipstation.com/products"
    res = requests.get(url, auth=Authorization, params=dict(sortBy="ModifyDate", sortDir="DESC"))
    if res.status_code == 200:
        return res.json().get('products', [])
    print(res.text)
    saveError(uid, "Shipstation/Products/updateShopProducts", res.text,data=dict(
        shopId=shopId,
        lastUpdate=updated_at_min
    ))
    raise API_Error(res.text, res.status_code)