# vouchers/utils.py

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64, json

KEY = "6d66fb7debfd15bf716bb14752b9603b"
IV = "716bb14752b9603b"

def encrypt_data(data, key, iv):
    try:
        if isinstance(data, dict):
            data = json.dumps(data)
        data_bytes = data.encode('utf-8')
        key_bytes = key.encode('utf-8')
        iv_bytes = iv.encode('utf-8')

        cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)
        encrypted = cipher.encrypt(pad(data_bytes, AES.block_size))
        return base64.b64encode(encrypted).decode('utf-8')
    except Exception as e:
        print("Encryption Error:", e)
        return data

def decrypt_data(encrypted_str, key, iv):
    try:
        encrypted_bytes = base64.b64decode(encrypted_str)
        key_bytes = key.encode('utf-8')
        iv_bytes = iv.encode('utf-8')

        cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)
        decrypted = unpad(cipher.decrypt(encrypted_bytes), AES.block_size)
        return decrypted.decode('utf-8')
    except Exception as e:
        print("Decryption Error:", e)
        return encrypted_str

def encrypt_payload(data):
    return encrypt_data(data, KEY, IV)

def decrypt_payload(data):
    decrypted = decrypt_data(data, KEY, IV)
    try:
        return json.loads(decrypted)
    except:
        return decrypted

# 🔑 Sample Usage
# Base Url : https://send.bulkgv.net/API/v1
# username : ZVBPNPCHVMBUAQTZYOWPLTXVWXWYERDS
# password : ]soLj$si!x6IL![KP~rkQ^sXG^hT3yJS
# key : 6d66fb7debfd15bf716bb14752b9603b
# iv : 716bb14752b9603b


# key = "6d66fb7debfd15bf716bb14752b9603b"
# iv = "716bb14752b9603b"

# payload = {
#     "mobile": "9999999999",
#     "amount": 200,
#     "voucher_type": "AMAZON"
# }

# encrypted = encrypt_data(payload, key, iv)
# print("Encrypted:", encrypted)

# # After API call
# decrypted = decrypt_data(encrypted, key, iv)
# print("Decrypted:", decrypted)

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}"
