/*
    Nome do Arquivo : script-formularios.js
    Projeto         : Pó de Ouro — Classificados Rurais
    Plataforma      : Softwareby (Low-Code)
    Escopo          : Scripts auxiliares de formulários (painel administrativo)
    Upload          : /app/file/resource/js/{ID}
    -------------------------------------------------------------------------
    Este arquivo é carregado SEPARADAMENTE do podeouro.js, dentro das telas de
    formulário da plataforma (ex.: cadastro de "banner"). Não depende de jQuery.
    -------------------------------------------------------------------------
*/

'use strict';

/* ============================================================================
   Auto-preenchimento de dimensões de imagem
   ----------------------------------------------------------------------------
   Usado no formulário da entidade "banner" (painel administrativo).
   Ao subir uma imagem no input de arquivo, lê a altura/largura naturais
   da imagem e preenche automaticamente os campos de altura e largura.

   IMPORTANTE: funciona sozinho — o script se vincula a todo input de arquivo
   (input[type=file]) da página. Não é preciso editar o onchange da plataforma.
============================================================================ */

/**
 * Lê as dimensões reais da imagem e preenche os campos de altura/largura.
 * Aceita como parâmetro: o Event, o próprio <input>, ou o id do registro.
 *
 * @param {Event|HTMLInputElement|string|number} [idOuEvento]
 */
function preencherDimensoesImagem(idOuEvento) {
    var input = null;

    if (idOuEvento && idOuEvento.files) {
        // Recebeu o próprio <input> (ex.: preencherDimensoesImagem(this))
        input = idOuEvento;
    } else if (idOuEvento && idOuEvento.target && idOuEvento.target.files) {
        // Recebeu o Event (ex.: preencherDimensoesImagem(event))
        input = idOuEvento.target;
    } else if (idOuEvento !== undefined && idOuEvento !== null) {
        // Recebeu o id do registro (ex.: preencherDimensoesImagem(4))
        input = document.getElementById('2888_' + idOuEvento);
    } else if (typeof event !== 'undefined' && event && event.target) {
        // Fallback: onchange="preencherDimensoesImagem()" (usa window.event)
        input = event.target;
    }

    if (!input || !input.files || input.files.length === 0) {
        return;
    }

    var arquivo = input.files[0];

    // Só processa arquivos de imagem
    if (!arquivo.type || arquivo.type.indexOf('image/') !== 0) {
        return;
    }

    var objectUrl = URL.createObjectURL(arquivo);
    var imagem = new Image();

    imagem.onload = function () {
        // altura = naturalHeight (campo input3260); largura = naturalWidth (input3261)
        var campoAltura = document.getElementById('input3260');
        var campoLargura = document.getElementById('input3261');

        if (campoAltura) campoAltura.value = imagem.naturalHeight;
        if (campoLargura) campoLargura.value = imagem.naturalWidth;

        URL.revokeObjectURL(objectUrl);
    };

    imagem.onerror = function () {
        URL.revokeObjectURL(objectUrl);
    };

    imagem.src = objectUrl;
}

/* ============================================================================
   AUTO-VINCULAÇÃO
   ----------------------------------------------------------------------------
   Sem depender de editar o onchange do input, o script escuta o evento "change"
   de todos os inputs de arquivo e preenche as dimensões automaticamente.
============================================================================ */
(function () {
    function vincular() {
        var inputs = document.querySelectorAll('input[type="file"]');
        for (var i = 0; i < inputs.length; i++) {
            var input = inputs[i];
            // Evita duplicar listener caso a função rode mais de uma vez
            if (input.dataset.poDimensoes === '1') continue;
            input.dataset.poDimensoes = '1';
            input.addEventListener('change', function (e) {
                preencherDimensoesImagem(e);
            });
        }
    }

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', vincular);
    } else {
        vincular();
    }
})();
