var MyWidget = SuperWidget.extend({

    // variáveis globais se precisar
    variavelNumerica: null,
    variavelCaracter: null,

    // quando a widget carrega
    init: function() {
        // já pode disparar consulta inicial se quiser
        this.consultarSolicitacoes();
    },

    // binds de botões
    bindings: {
        local: {
            'pesquisar': ['click_consultarSolicitacoes']  // data-pesquisar="true"
        },
        global: {}
    },

    // método que consulta o dataset
    consultarSolicitacoes: function() {
        var numSolicitacao = $("#numSolicitacao").val();
        var solicitante = $("#solicitante").val();
        var status = $("#status").val();

        var constraints = [];

        // filtra apenas o processo correto
        constraints.push(DatasetFactory.createConstraint(
            "processId",
            "Solicitação de compras - v2",   // ⚠️ deve ser idêntico ao dataset tester
            "Solicitação de compras - v2",
            ConstraintType.MUST
        ));

        // filtro nº solicitação
        if (numSolicitacao) {
            constraints.push(DatasetFactory.createConstraint(
                "workflowProcessPK.processInstanceId",
                numSolicitacao,
                numSolicitacao,
                ConstraintType.MUST
            ));
        }

        // filtro solicitante
        if (solicitante) {
            constraints.push(DatasetFactory.createConstraint(
                "requesterId",
                solicitante,
                solicitante,
                ConstraintType.MUST
            ));
        }

        // filtro status
        if (status !== "") {
            constraints.push(DatasetFactory.createConstraint(
                "status",
                status,
                status,
                ConstraintType.MUST
            ));
        }

        // consulta dataset
        var ds = DatasetFactory.getDataset("workflowProcess", null, constraints, null);

        // monta tabela
        var tbody = $("#tbSolicitacoes");
        tbody.empty();

        if (ds && ds.values && ds.values.length > 0) {
            ds.values.forEach(function(item) {
                var statusTxt = traduzStatus(item["status"]);

                var tr = "<tr>";
                tr += "<td>" + item["workflowProcessPK.processInstanceId"] + "</td>";
                tr += "<td>" + item["requesterId"] + "</td>";
                tr += "<td>" + item["startDateProcess"] + "</td>";
                tr += "<td>" + statusTxt + "</td>";
                tr += "<td><button class='btn btn-info btn-sm' onclick='abrirSolicitacao(" 
                       + item["workflowProcessPK.processInstanceId"] + ")'>Abrir</button></td>";
                tr += "</tr>";

                tbody.append(tr);
            });
        } else {
            tbody.append("<tr><td colspan='5' class='text-center'>Nenhum resultado encontrado</td></tr>");
        }
    }
});

// helpers fora do extend

function traduzStatus(status) {
    if (status === "0") return "Aberto";
    if (status === "1") return "Cancelado";
    if (status === "2") return "Finalizado";
    return status;
}

function abrirSolicitacao(processInstanceId) {
    window.open('/portal/p/1/pageworkflowview?app_ecm_workflowview&processInstanceId=' + processInstanceId, '_blank');
}
