from datetime import datetime

import requests

from V2.functions.Applications.main import Application
from V2.functions.Shops.main import Shop
from V2.middlewares.auth import API_Error
from V2.Params import Params


def saveApiKey(params:Params):
    uid, enterpriseId = params.currentUser.uid, params.currentUser.enterpriseId
    apiKey = params.args.get("apiKey")
    platformShopId = params.args.get("storeId")
    if platformShopId and apiKey:
        store = getOrderDeskStore(apiKey, platformShopId)
        if store:
            platformShopId = store.get("id")
            name = store.get("name")
            timezone = store.get("timezone")
            url = store.get("store_url")
            # app = Application(
            #     uid=uid,
            #     enterpriseId=enterpriseId,
            #     id="12"+enterpriseId,
            #     platformId="12",
            #     platformName="OrderDesk",
            #     type="Ecommerce",
            #     apiKey=apiKey,
            # )
            shop = Shop(
                platformShopId=platformShopId,
                name=name,
                timezone=timezone,
                url=url,
                apiKey=apiKey,
                accessToken=None,
                platformId="12",
                platformName="OrderDesk",
                appId="12"+enterpriseId,
                uid=uid,
                enterpriseId=enterpriseId,
                updatedAt=datetime.now(),
                createdAt=datetime.now()
            )
            return shop.save()
    raise API_Error("Invalid Api Key", 400, meta=dict(error="Invalid Api Key"))



def getOrderDeskStore(apiKey, storeId):
    url = "https://app.orderdesk.me/api/v2/store"
    headers = {
        "ORDERDESK-STORE-ID": storeId,
        "ORDERDESK-API-KEY": apiKey,
        "Content-Type": "application/json"
    }
    res = requests.get(url, headers=headers)
    if res.status_code == 200: return res.json().get("store")
    raise API_Error(res.text, res.status_code)