import json

import requests

from configs.firebase import db
from functions.Shipstation.Orders import \
    updateSingleOrder as updateSingleShipstationOrder
from functions.Shopify.Orders import \
    updateSingleOrder as updateSingleShopifyOrder
from functions.Square.Orders import \
    updateSingleOrder as updateSingleSquareOrder
from functions.WooCommerce.Orders import \
    updateSingleOrder as updateSingleWooOrder
from V2.functions.Etsy.Orders import updateSingleOrder as updateSingleEtsyOrder
from V2.functions.Shopify.Orders import \
    verifyDailyOrders as verifyDailyShopifyOrders
from V2.functions.Shops.main import Shop
from V2.functions.Squarespace.Orders import \
    updateSingleOrder as updateSingleSquarespaceOrder
from V2.Params import Params


def syncBatchOrders():
    docs = [doc.to_dict() for doc in db.collection("enterprises/RUYxhoZgNeEZGOo2oTKO/batches/1720443646102/batchItems").get()]
    platformOrderIds = set([doc.get("platformOrderId") for doc in docs])
    print(list(platformOrderIds))
#     shop = Shop.get("y4HzVHw7GHhTZUTpiUU6")
#     for platformOrderId in platformOrderIds:
#         print(updateSingleShopifyOrder(shop=shop, platformOrderId=platformOrderId))
# syncBatchOrders()

def updateSingleOrder(params:Params):
    platformOrderId = params.args.get("platformOrderId")
    shopId = params.args.get("shopId")
    shop = Shop.get(shopId)
    refresh = bool(params.args.get("refresh"))
    # items = db.collection("items").where("enterpriseId", "==", "RUYxhoZgNeEZGOo2oTKO").get()
    # platformOrderIds = set([item.to_dict().get("platformOrderId") for item in items])
    # for platformOrderId in platformOrderIds:
    #     print(platformOrderId)
    #     if shop.platformId == "1":  updateSingleEtsyOrder(shop, platformOrderId)
    #     elif shop.platformId == "2":  updateSingleShopifyOrder(shop, platformOrderId)
    if shop.platformId == "1": return updateSingleEtsyOrder(shop, platformOrderId, readdd=refresh)
    elif shop.platformId == "2": return updateSingleShopifyOrder(shop, platformOrderId, readd=refresh)
    elif shop.platformId == "3": return updateSingleWooOrder(shop.to_dict(), platformOrderId, readd=refresh)
    elif shop.platformId == "4": return updateSingleSquareOrder(shop.to_dict(), platformOrderId)
    elif shop.platformId == "5": return updateSingleShipstationOrder(shop, platformOrderId, readd=refresh)
    elif shop.platformId == "10": return updateSingleSquarespaceOrder(shop, platformOrderId, readd=refresh)
    return None


def verifyDailyOrders(params: Params):
    uid = params.currentUser.uid
    shops = Shop.getUserShops(uid)
    start, end = params.args.get("start"), params.args.get("end")
    updated = []
    for shop in shops:
        if shop.platformId == "2": updated.append(verifyDailyShopifyOrders(shop, start, end))
    return updated