import base64
import hashlib
import hmac

from flask import Blueprint, Response, abort, request

from functions.Applications import getAppCredentials
from functions.Response import sendResponse
from functions.Shopify import Auth, Fulfillment, Orders, Products
from functions.Shopify.Charge import confirmCharge, createRecurringCharge
from functions.Shops import getShopById

appBlueprint = Blueprint("app", __name__)

def verify_webhook(apiSecret, data, hmac_header):
    digest = hmac.new(apiSecret.encode('utf-8'),data, hashlib.sha256).digest()
    computed_hmac = base64.b64encode(digest)
    return hmac.compare_digest(computed_hmac, str(hmac_header).encode('utf-8'))
@appBlueprint.route("/auth")
def auth():
    return sendResponse(Auth.shopifyAuth, request, authRequired=False)

@appBlueprint.get("/auth/<id>")
def directAuth(id):
    args = request.args.to_dict()
    return Auth.shopifyDirectAuth(dict(id=id, **args))

@appBlueprint.route("/anonymous-auth")
def anonymousAuth():
    return sendResponse(Auth.anonyAuth, request, authRequired=False)

@appBlueprint.post("/<enterpriseId>/cdr")
def customDataRequest(enterpriseId):
    app = getAppCredentials("2"+enterpriseId)
    data = request.get_data()
    verified = verify_webhook(app.get("apiSecret"),data, request.headers.get('X-Shopify-Hmac-SHA256'))
    if not verified:
        return Response("Webhook verification failed.",status=401)
    return sendResponse(Auth.customDataRequest, request, authRequired=False)

@appBlueprint.post("/<enterpriseId>/cde")
def customersRedact(enterpriseId):
    app = getAppCredentials("2"+enterpriseId)
    data = request.get_data()
    verified = verify_webhook(app.get("apiSecret"),data, request.headers.get('X-Shopify-Hmac-SHA256'))
    if not verified:
        return Response("Webhook verification failed.",status=401)
    return sendResponse(Auth.customersRedact, request, authRequired=False)

@appBlueprint.post("/<enterpriseId>/sde")
def shopRedact(enterpriseId):
    app = getAppCredentials("2"+enterpriseId)
    data = request.get_data()
    print(data)
    verified = verify_webhook(app.get("apiSecret"),data,request.headers.get('X-Shopify-Hmac-SHA256'))
    if not verified:
        return Response("Webhook verification failed.",status=401)
    return sendResponse(Auth.shopRedact, request, authRequired=False)