/**
 * Dataset: ds_busca_cep
 * Descricao: Consulta CEP via API ViaCEP usando fluigAPI.getAuthorizeClientService()
 * Servico Fluig: ViaCEP (cadastrado no Painel de Servicos)
 * Baseado em: Workspace Igao - WFAPV001/datasets/BuscaCEP.js
 */

function createDataset(fields, constraints, sortFields) {
    var dataset = DatasetBuilder.newDataset();
    dataset.addColumn("cep");
    dataset.addColumn("logradouro");
    dataset.addColumn("complemento");
    dataset.addColumn("bairro");
    dataset.addColumn("localidade");
    dataset.addColumn("uf");
    dataset.addColumn("erro");

    var cep = "";

    // Ler constraint obrigatoria
    if (constraints != null) {
        for (var i = 0; i < constraints.length; i++) {
            if (constraints[i].fieldName == "cep") {
                cep = constraints[i].initialValue;
            }
        }
    }

    if (cep == null || cep.trim().equals("")) {
        dataset.addRow(["", "", "", "", "", "", "CEP nao informado"]);
        return dataset;
    }

    // Limpar caracteres nao numericos
    cep = cep.replaceAll("[^0-9]", "");

    try {
        // Obter servico cadastrado no Painel do Fluig
        var servico = fluigAPI.getAuthorizeClientService().getAuthorizeClient("ViaCEP");
        var url = servico.getEndpoint() + "/" + cep + "/json/";

        log.info("[ds_busca_cep] Consultando CEP: " + cep);

        // Chamada REST GET
        var clientService = fluigAPI.getAuthorizeClientService();
        var data = clientService.invoke(url, "GET", null, null, null, null);

        if (data != null) {
            var resultado = new org.json.JSONObject(data.getResult());

            if (resultado.has("erro") && resultado.getBoolean("erro")) {
                dataset.addRow([cep, "", "", "", "", "", "CEP nao encontrado"]);
            } else {
                dataset.addRow([
                    resultado.optString("cep", ""),
                    resultado.optString("logradouro", ""),
                    resultado.optString("complemento", ""),
                    resultado.optString("bairro", ""),
                    resultado.optString("localidade", ""),
                    resultado.optString("uf", ""),
                    ""
                ]);
            }
        }

        log.info("[ds_busca_cep] Consulta finalizada com sucesso");

    } catch (e) {
        log.error("[ds_busca_cep] Erro ao consultar CEP: " + e.message);
        dataset.addRow([cep, "", "", "", "", "", "Erro: " + e.message]);
    }

    return dataset;
}
