"""
Exemplo de integração com a API Fiscal SysVelox — Python (só biblioteca padrão, sem
precisar instalar nada com pip).

1. Troque API_KEY pela sua chave (gerada em https://api.sysvelox.com/conta/chaves.php)
2. Troque COMPANY_ID pelo ID da sua empresa (veja em https://api.sysvelox.com/conta/empresas.php)
3. Rode: python3 exemplo.py
"""

import json
import time
import urllib.request
import urllib.error

API_KEY = "sk_test_TROQUE_PELA_SUA_CHAVE"
COMPANY_ID = "TROQUE_PELO_ID_DA_EMPRESA"
BASE_URL = "https://api.sysvelox.com"


def chamar_api(method, path, body=None, idempotency_key=None):
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    }
    if idempotency_key:
        headers["Idempotency-Key"] = idempotency_key

    data = json.dumps(body).encode("utf-8") if body is not None else None
    request = urllib.request.Request(BASE_URL + path, data=data, headers=headers, method=method)

    try:
        with urllib.request.urlopen(request) as response:
            return response.status, json.loads(response.read())
    except urllib.error.HTTPError as error:
        return error.code, json.loads(error.read())


def main():
    print("== Emitindo NFC-e ==")

    status, emissao = chamar_api(
        "POST",
        "/v1/nfce",
        {
            "company_id": COMPANY_ID,
            # Opcional: forma de pagamento (padrão "dinheiro" se omitido). Valores aceitos:
            # dinheiro, cheque, cartao_credito, cartao_debito, credito_loja,
            # vale_alimentacao, vale_refeicao, vale_presente, vale_combustivel, boleto,
            # deposito_bancario, pix, transferencia, sem_pagamento, outros.
            "payment_method": "pix",
            # Opcional: CPF/CNPJ do cliente na nota (só números). Omita pra consumidor não
            # identificado.
            "destinatario": {
                "documento": "11122233396",
                "nome": "Cliente Exemplo",
            },
            # ------------------------------------------------------------------
            # OPÇÕES AVANÇADAS (descomente o que precisar) — todo campo explicado
            # em https://api.sysvelox.com/docs/referencia.php
            # ------------------------------------------------------------------
            # "discount_cents": 500,        # desconto total da venda, em centavos
            # "freight_cents": 300,         # frete, em centavos
            # "change_cents": 500,          # troco (só com payment_method = dinheiro)
            # "payments": [                 # pagamento dividido — substitui payment_method
            #     {"method": "dinheiro", "amount_cents": 500},
            #     {"method": "cartao_credito", "amount_cents": 500},
            # ],
            "items": [
                {
                    "description": "Produto de exemplo",
                    "ncm": "12345678",
                    "cfop": "5102",
                    "unit": "UN",
                    "quantity": 1,
                    "unit_price_cents": 1000,
                    "total_cents": 1000,
                    "csosn": "102",
                    "cst_pis": "07",
                    "cst_cofins": "07",
                }
            ],
        },
        idempotency_key=f"exemplo-{int(time.time())}",
    )

    print(f"HTTP {status}")
    print(emissao)

    if status >= 400:
        return

    documento_id = emissao["id"]

    print(f"\n== Consultando status de {documento_id} (aguardando alguns segundos) ==")
    time.sleep(5)

    status, consulta = chamar_api("GET", f"/v1/notas/{documento_id}")
    print(f"HTTP {status}")
    print(consulta)


if __name__ == "__main__":
    main()
