<?php
/**
 * 1MZ Date Picker — componente isolado e reutilizável.
 *
 * @package OneMZ_For_Artists
 * @since   1.5.147
 *
 * Responsabilidade: renderizar um campo de data com modal moderno
 * (estilo Amadea Music) que mostra recomendações, atalho para data
 * sugerida e calendário integrado.
 *
 * Arquitectura:
 *   - PHP renderiza trigger (texto formatado) + input hidden + modal HTML
 *   - JS (rmbz-date-picker.js) gere abertura/fecho, navegação calendário,
 *     escrita do valor no hidden
 *   - CSS (rmbz-date-picker.css) estiliza tudo
 *
 * API pública: rmbz_render_date_picker( $args )
 *
 * Múltiplos pickers na mesma página são suportados via UID único.
 */

if ( ! defined('ABSPATH') ) exit;

/**
 * Renderiza um date picker completo (trigger + hidden + modal).
 *
 * @param array $args {
 *   @type string $name           Nome do input hidden (vai no form). Obrigatório.
 *   @type string $value          Valor inicial em formato ISO (Y-m-d). Default ''.
 *   @type string $min_date       Data mínima permitida em ISO. Default ''.
 *   @type string $max_date       Data máxima permitida em ISO. Default ''.
 *   @type int    $suggested_days Quantos dias adicionar ao "hoje" para sugerir. Default 14.
 *   @type string $label          Label exibido por cima do trigger. Default ''.
 *   @type bool   $required       Se o campo é obrigatório. Default false.
 *   @type string $placeholder    Texto exibido quando vazio. Default 'Escolher data...'.
 *   @type string $hint           Hint pequeno exibido por baixo do trigger. Default ''.
 * }
 */
function rmbz_render_date_picker( $args = [] ) {
    $defaults = [
        'name'           => '',
        'value'          => '',
        'min_date'       => '',
        'max_date'       => '',
        'suggested_days' => 14,
        'label'          => '',
        'required'       => false,
        'placeholder'    => __( 'Escolher data...', '1mz-for-artists' ),
        'hint'           => '',
        // [1.5.152] Quando true, o modal pergunta "É catálogo antigo?" se o
        // utilizador tentar clicar numa data anterior a min_date. Se confirmar,
        // o picker submete `{name}_is_legacy=1` no form via input hidden extra.
        'allow_legacy'   => false,
        'legacy_field'   => '',  // Nome do hidden de legacy (default: {name}_is_legacy)
        'legacy_value'   => '',  // Valor inicial do hidden de legacy ('' ou '1')
    ];
    $args = wp_parse_args( $args, $defaults );

    if ( empty( $args['name'] ) ) {
        // Nome é obrigatório, não renderizar nada se em falta.
        return;
    }

    // Auto-gerar nome do campo legacy se não foi passado
    if ( empty( $args['legacy_field'] ) ) {
        $args['legacy_field'] = $args['name'] . '_is_legacy';
    }

    // UID único para esta instância — permite múltiplos pickers na mesma página.
    static $counter = 0;
    $counter++;
    $uid = 'rmbz-dp-' . $counter . '-' . wp_rand( 1000, 9999 );

    // Formatar valor para display ("25.Jan.2026" estilo Amadea).
    // [1.5.152] Se legacy_value=1, prepender ícone ⏳ para sinalizar.
    $display_text = '';
    if ( ! empty( $args['value'] ) ) {
        $ts = strtotime( $args['value'] );
        if ( $ts ) {
            $display_text = rmbz_dp_format_pt_short( $ts );
            if ( $args['legacy_value'] === '1' ) {
                $display_text = '⏳ ' . $display_text;
            }
        }
    }
    ?>
    <div class="rmbz-dp" data-rmbz-dp="<?php echo esc_attr( $uid ); ?>"
         data-suggested-days="<?php echo (int) $args['suggested_days']; ?>"
         data-min-date="<?php echo esc_attr( $args['min_date'] ); ?>"
         data-max-date="<?php echo esc_attr( $args['max_date'] ); ?>"
         data-allow-legacy="<?php echo $args['allow_legacy'] ? '1' : '0'; ?>"
         data-legacy-field="<?php echo esc_attr( $args['legacy_field'] ); ?>">

        <?php if ( $args['label'] ): ?>
            <label class="rmbz-dp-label" for="<?php echo esc_attr( $uid ); ?>-trigger">
                <?php echo esc_html( $args['label'] ); ?>
                <?php if ( $args['required'] ): ?><span class="rmbz-dp-required">*</span><?php endif; ?>
            </label>
        <?php endif; ?>

        <button type="button"
                id="<?php echo esc_attr( $uid ); ?>-trigger"
                class="rmbz-dp-trigger<?php echo empty( $display_text ) ? ' rmbz-dp-trigger-empty' : ''; ?>"
                aria-haspopup="dialog">
            <span class="rmbz-dp-trigger-text">
                <?php echo esc_html( $display_text ?: $args['placeholder'] ); ?>
            </span>
            <span class="rmbz-dp-trigger-icon" aria-hidden="true">
                <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
                    <rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect>
                    <line x1="16" y1="2" x2="16" y2="6"></line>
                    <line x1="8" y1="2" x2="8" y2="6"></line>
                    <line x1="3" y1="10" x2="21" y2="10"></line>
                </svg>
            </span>
        </button>

        <input type="hidden"
               name="<?php echo esc_attr( $args['name'] ); ?>"
               id="<?php echo esc_attr( $uid ); ?>-value"
               value="<?php echo esc_attr( $args['value'] ); ?>"
               <?php if ( $args['required'] ): ?>required<?php endif; ?>>

        <?php if ( $args['allow_legacy'] ): ?>
            <?php /* [1.5.152] Hidden de catálogo legado — só renderizado se
                   allow_legacy=true. JS marca value="1" quando o utilizador
                   confirma que é catálogo antigo. Default vazio. */ ?>
            <input type="hidden"
                   name="<?php echo esc_attr( $args['legacy_field'] ); ?>"
                   class="rmbz-dp-legacy-flag"
                   value="<?php echo esc_attr( $args['legacy_value'] ); ?>">
        <?php endif; ?>

        <?php if ( $args['hint'] ): ?>
            <small class="rmbz-dp-hint"><?php echo esc_html( $args['hint'] ); ?></small>
        <?php endif; ?>

    </div>
    <?php
}

/**
 * Formata timestamp Unix para "25.Jan.2026" estilo Amadea.
 */
function rmbz_dp_format_pt_short( $timestamp ) {
    $meses = [
        'Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun',
        'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'
    ];
    $dia  = (int) date( 'j', $timestamp );
    $mes  = $meses[ (int) date( 'n', $timestamp ) - 1 ];
    $ano  = (int) date( 'Y', $timestamp );
    return sprintf( '%02d.%s.%d', $dia, $mes, $ano );
}

/**
 * Renderiza o modal HTML único partilhado por todos os pickers da página.
 *
 * Apenas 1 modal é necessário (reutilizado por todos os triggers).
 * Deve ser chamado UMA vez perto do fim da página (antes de </body>).
 *
 * Hook recomendado: 'wp_footer' com prioridade alta.
 */
function rmbz_render_date_picker_modal() {
    static $rendered = false;
    if ( $rendered ) return;
    $rendered = true;
    ?>
    <div id="rmbz-dp-modal" class="rmbz-dp-modal" role="dialog" aria-modal="true" aria-labelledby="rmbz-dp-modal-title" hidden>
        <div class="rmbz-dp-modal-overlay" data-rmbz-dp-close="overlay"></div>

        <div class="rmbz-dp-modal-dialog" role="document">

            <div class="rmbz-dp-modal-header">
                <h3 id="rmbz-dp-modal-title" class="rmbz-dp-modal-title">
                    <?php esc_html_e( 'Escolher data', '1mz-for-artists' ); ?>
                </h3>
                <button type="button" class="rmbz-dp-modal-close" aria-label="<?php esc_attr_e( 'Fechar', '1mz-for-artists' ); ?>" data-rmbz-dp-close="x">
                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
                        <line x1="18" y1="6" x2="6" y2="18"></line>
                        <line x1="6" y1="6" x2="18" y2="18"></line>
                    </svg>
                </button>
            </div>

            <div class="rmbz-dp-modal-body">

                <?php /* Coluna esquerda — texto explicativo + atalho */ ?>
                <div class="rmbz-dp-modal-left">
                    <p class="rmbz-dp-explanation">
                        <?php esc_html_e( 'Algumas plataformas (Spotify, Apple Music) podem precisar até 1 mês para processar a música após receberem.', '1mz-for-artists' ); ?>
                    </p>
                    <p class="rmbz-dp-explanation">
                        <?php esc_html_e( 'A maioria fica disponível em 2 semanas, mas para garantir que a tua música fica live na data certa recomendamos pelo menos 14 dias de antecedência.', '1mz-for-artists' ); ?>
                    </p>

                    <div class="rmbz-dp-suggestion">
                        <div class="rmbz-dp-suggestion-label">
                            <?php esc_html_e( '1MZ sugere:', '1mz-for-artists' ); ?>
                        </div>
                        <div class="rmbz-dp-suggestion-date" data-rmbz-dp-suggested>—</div>
                    </div>

                    <p class="rmbz-dp-alt">
                        <?php esc_html_e( 'Em alternativa, escolhe uma data no calendário ao lado.', '1mz-for-artists' ); ?>
                    </p>

                    <button type="button" class="rmbz-dp-btn rmbz-dp-btn-suggested" data-rmbz-dp-action="use-suggested">
                        <?php esc_html_e( 'Usar data sugerida', '1mz-for-artists' ); ?>
                    </button>
                </div>

                <?php /* Coluna direita — calendário customizado */ ?>
                <div class="rmbz-dp-modal-right">

                    <div class="rmbz-dp-cal-nav">
                        <button type="button" class="rmbz-dp-cal-arrow" data-rmbz-dp-action="prev-month" aria-label="<?php esc_attr_e( 'Mês anterior', '1mz-for-artists' ); ?>">
                            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
                                <polyline points="15 18 9 12 15 6"></polyline>
                            </svg>
                        </button>

                        <div class="rmbz-dp-cal-selects">
                            <select class="rmbz-dp-cal-month" data-rmbz-dp-month aria-label="<?php esc_attr_e( 'Mês', '1mz-for-artists' ); ?>"></select>
                            <select class="rmbz-dp-cal-year" data-rmbz-dp-year aria-label="<?php esc_attr_e( 'Ano', '1mz-for-artists' ); ?>"></select>
                        </div>

                        <button type="button" class="rmbz-dp-cal-arrow" data-rmbz-dp-action="next-month" aria-label="<?php esc_attr_e( 'Mês seguinte', '1mz-for-artists' ); ?>">
                            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
                                <polyline points="9 18 15 12 9 6"></polyline>
                            </svg>
                        </button>
                    </div>

                    <div class="rmbz-dp-cal-weekdays">
                        <span><?php esc_html_e( 'Dom', '1mz-for-artists' ); ?></span>
                        <span><?php esc_html_e( 'Seg', '1mz-for-artists' ); ?></span>
                        <span><?php esc_html_e( 'Ter', '1mz-for-artists' ); ?></span>
                        <span><?php esc_html_e( 'Qua', '1mz-for-artists' ); ?></span>
                        <span><?php esc_html_e( 'Qui', '1mz-for-artists' ); ?></span>
                        <span><?php esc_html_e( 'Sex', '1mz-for-artists' ); ?></span>
                        <span><?php esc_html_e( 'Sáb', '1mz-for-artists' ); ?></span>
                    </div>

                    <div class="rmbz-dp-cal-grid" data-rmbz-dp-grid></div>

                </div>

            </div>

            <?php /* [1.5.152] Caixa amarela inline — aparece quando utilizador
                   tenta clicar em data desabilitada (passada). Oculta por defeito.
                   JS controla visibilidade. */ ?>
            <div class="rmbz-dp-legacy-prompt" data-rmbz-dp-legacy-prompt hidden>
                <div class="rmbz-dp-legacy-prompt-icon" aria-hidden="true">⚠</div>
                <div class="rmbz-dp-legacy-prompt-body">
                    <div class="rmbz-dp-legacy-prompt-title">
                        <?php esc_html_e( 'Esta data já passou', '1mz-for-artists' ); ?>
                    </div>
                    <div class="rmbz-dp-legacy-prompt-text">
                        <?php esc_html_e( 'Se a música já foi lançada antes (noutra distribuidora, YouTube, SoundCloud, etc.) podes registar como catálogo antigo.', '1mz-for-artists' ); ?>
                    </div>
                    <button type="button" class="rmbz-dp-legacy-prompt-btn" data-rmbz-dp-action="confirm-legacy">
                        <?php esc_html_e( 'Sim, é catálogo antigo', '1mz-for-artists' ); ?>
                    </button>
                </div>
            </div>

            <?php /* [1.5.155] Caixa informativa (sem botão) — aparece quando o
                   modo legacy é auto-activado por navegação para mês/ano todo
                   no passado. Apenas avisa o utilizador que está a registar
                   uma música como catálogo antigo. */ ?>
            <div class="rmbz-dp-legacy-info" data-rmbz-dp-legacy-info hidden>
                <div class="rmbz-dp-legacy-info-icon" aria-hidden="true">⏳</div>
                <div class="rmbz-dp-legacy-info-body">
                    <div class="rmbz-dp-legacy-info-title">
                        <?php esc_html_e( 'Modo catálogo antigo activo', '1mz-for-artists' ); ?>
                    </div>
                    <div class="rmbz-dp-legacy-info-text">
                        <?php esc_html_e( 'Estás a registar uma música já lançada anteriormente. A data ficará marcada como catálogo antigo na distribuição.', '1mz-for-artists' ); ?>
                    </div>
                </div>
            </div>

            <div class="rmbz-dp-modal-footer">
                <button type="button" class="rmbz-dp-btn rmbz-dp-btn-cancel" data-rmbz-dp-close="cancel">
                    <?php esc_html_e( 'Cancelar', '1mz-for-artists' ); ?>
                </button>
                <button type="button" class="rmbz-dp-btn rmbz-dp-btn-confirm" data-rmbz-dp-action="use-selected">
                    <?php esc_html_e( 'Usar data seleccionada', '1mz-for-artists' ); ?>
                </button>
            </div>

        </div>
    </div>
    <?php
}

/**
 * Auto-renderizar o modal no footer (uma vez, automaticamente).
 * Hook prioridade 5 = correr cedo no wp_footer, antes do scripts inline.
 */
add_action( 'wp_footer', 'rmbz_render_date_picker_modal', 5 );
