import json

from flask import Blueprint, request

from configs.env import PROJECT_ID
from configs.firebase import APP_URL
from V2.functions.Etsy import Auth, Orders, Products, Shipments
from V2.middlewares.auth import sendResponse

etsyV2 = Blueprint("etsyv2", __name__)

@etsyV2.get("/auth")
def auth():
    return sendResponse(Auth.authUrl, request)

@etsyV2.post("/token")
def token():
    return sendResponse(Auth.authToken, request)

@etsyV2.post("/shipping-profiles")
def createShippingProfile():
    return sendResponse(Shipments.createShippingProfile, request)

@etsyV2.get("/shipping-profiles")
def getShippingProfiles():
    return sendResponse(Shipments.getShippingProfiles, request)

@etsyV2.get("/taxonomy")
def getTaxonomy():
    return sendResponse(Products.getTaxonomy, request)

@etsyV2.get("/orders")
def orders():
    return sendResponse(Orders.updateAllOrders, request, authRequired=False)

@etsyV2.post("/products")
def products():
    return sendResponse(Products.updateAllProducts, request, authRequired=False)


import os

from google.cloud import tasks_v2
from google.protobuf import timestamp_pb2


@etsyV2.route("/products-cron-trigger")
def cron_trigger():
    client = tasks_v2.CloudTasksClient()
    queue = 'etsy-products-update'
    location = 'us-central1'
    url = f'{APP_URL}/v2/etsy/products?consumer_key=Kykpyje2bhg3265E3KDB8ttSt4rZC5IT'  # ✅ your actual endpoint
    payload = {}  # Optional payload if your handler needs POST data
    parent = client.queue_path(PROJECT_ID, location, queue)
    task = {
        'http_request': {  # Specify HTTP POST
            'http_method': "POST",
            'url': url,
            'headers': {
                'Content-Type': 'application/json'
            },
            'body':json.dumps(payload).encode()
        }
    }

    # Optionally schedule in future
    # timestamp = timestamp_pb2.Timestamp()
    # timestamp.FromDatetime(datetime.datetime.utcnow() + datetime.timedelta(seconds=30))
    # task['schedule_time'] = timestamp

    response = client.create_task(parent=parent, task=task)

    print(f'Created task {response.name}')
    return 'Task queued', 200

@etsyV2.post("/exchange-tokens")
def exchangeToken():
    return sendResponse(Auth.exchangeTokens, request)

@etsyV2.get("/submit-shipments")
def submitRemainingShipment():
    return sendResponse(Orders.submitRemainingShipment, request)

@etsyV2.post("/submit-shipment")
def submitShipmentForOrder():
    return sendResponse(Orders.submitShipmentForOrder, request)