import requests
from utils import encrypt_payload, decrypt_payload  # ✅ ensure correct imports


# 🔐 Step 1: Get Token
GET_TOKEN_URL = "https://send.bulkgv.net/API/v1/gettoken"

username = 'ZVBPNPCHVMBUAQTZYOWPLTXVWXWYERDS'
password = ']soLj$si!x6IL![KP~rkQ^sXG^hT3yJS'
import uuid
from datetime import datetime

def generate_order_id(prefix="ORDER_TEST"):
    """
    Generates a unique ExternalOrderId using prefix + datetime + short UUID
    Format: ORDER_TEST_20250807_abc12345
    """
    timestamp = datetime.now().strftime("%Y%m%d")
    short_uuid = uuid.uuid4().hex[:8]  # 8-char unique identifier
    return f"{prefix}_{timestamp}_{short_uuid}"

order_id = generate_order_id()
print("🆔 Generated Order ID:", order_id)

token_headers = {
    "Content-Type": "application/json",
    "username": username,
    "password": password
}

import json
response = requests.get(GET_TOKEN_URL, headers=token_headers)
print("🔍 Token API Status:", response.status_code)
print("📦 Token Response:", response.text)
if response.status_code != 200:
    print("❌ Failed to get token")
    exit()

try:
    token_raw = response.json().get("data")
    decrypted_token_raw = decrypt_payload(token_raw)
    print("🪄 Decrypted Token Raw:", decrypted_token_raw)

    # ✅ If decrypted is a valid JWT (contains 2 dots), use directly
    if decrypted_token_raw.count('.') == 2:
        token = decrypted_token_raw
    else:
        token = json.loads(decrypted_token_raw)['result']


    import jwt
    decoded = jwt.decode(token, options={"verify_signature": False})
    print(decoded)

    print("✅ Final Token to Use:", token)

except Exception as e:
    print("❌ Token decryption failed:", e)
    exit()

import requests
import json

# 🔁 Step 2: Pull Voucher
PULL_URL = "https://send.bulkgv.net/API/v1/pullvoucher"

# ✅ Set correct payload (this must be encrypted using AES)
raw_payload = {
    "BrandProductCode": "TestBrandFixedPromocodeGWVItjIXuHMSHf3R",
    "ExternalOrderId": order_id
,
    "Quantity": 1,
    "Denomination": 100
}

# ✅ Encrypt payload (your encrypt_payload function must be defined earlier)
encrypted_payload = encrypt_payload(raw_payload)

# ✅ Set headers with token from previous token API call (decrypted one)
pull_headers = {
    "Content-Type": "application/json",
    "token": token
}

# ✅ Perform POST request
response = requests.post(PULL_URL, headers=pull_headers, json={"payload": encrypted_payload})

# ✅ Debug logs
print("\n🟩 PULL VOUCHER API RESULT")
print("🔍 Status Code:", response.status_code)
print("📦 Raw Response:", response.text)
print("🔐 Token used:", token)
print("📤 Encrypted Payload:", encrypted_payload)




# curl -X POST "https://send.bulkgv.net/API/v1/pullvoucher" -H "Content-Type: application/json" -H "token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZXN1bHQiOnsidXNlcm5hbWUiOiJaVkJQTlBDSFZNQlVBUVRaWU9XUExUWFZXWFdZRVJEUyIsInBhc3N3b3JkIjoiXXNvTGokc2kheDZJTCFbS1B-cmtRXnNYR15oVDN5SlMifSwiaWF0IjoxNzU0NjU0OTY3LCJleHAiOjE3NTQ3NDEzNjd9.DrncGNBm1lqAfoD2gU5jrUD70zl4qr6cosbvpPVXcOU" -d "{\"payload\": \"28JNaliL3k+bcBiM//mvnCIbwirUlGaVkH8wxTvhurQ/1v8laZYm3nMmL0Wapdxj9Kcc34b3vpDaykv0dXwWfeqFy5Z+l38ZSf7jN/FpSg85YEFJb76+bYBUtGisOUEy5aUJyDW3uBlec+EuFkXkEJ5BQK7hr5M64ao8C3HGxpI=\"}"
