<?php
/**
 * RG Subtitle Block
 *
 * Registers the rg/subtitle Gutenberg block.
 * Displays an eyebrow/subtitle text with uppercase styling.
 * Based on The Regent Grand design system.
 */

add_action('init', function() {
    $registry = WP_Block_Type_Registry::get_instance();
    if ($registry->is_registered('rg/subtitle')) {
        return;
    }

    wp_register_script(
        'rg-subtitle-editor',
        get_stylesheet_directory_uri() . '/blocks/rg-subtitle/editor.js',
        array('wp-blocks', 'wp-element', 'wp-block-editor', 'wp-components'),
        filemtime(get_stylesheet_directory() . '/blocks/rg-subtitle/editor.js')
    );

    register_block_type('rg/subtitle', array(
        'editor_script'   => 'rg-subtitle-editor',
        'render_callback' => 'rg_render_subtitle_block',
        'attributes'      => array(
            'text' => array(
                'type'    => 'string',
                'default' => '',
            ),
            'color' => array(
                'type'    => 'string',
                'default' => 'gold',
            ),
            'align' => array(
                'type'    => 'string',
                'default' => 'left',
            ),
            'url' => array(
                'type'    => 'string',
                'default' => '',
            ),
            'linkTarget' => array(
                'type'    => 'string',
                'default' => '_self',
            ),
        ),
    ));
});

/**
 * Enqueue frontend styles for the subtitle block.
 */
add_action('wp_enqueue_scripts', function() {
    wp_register_style(
        'rg-subtitle-style',
        false
    );
    wp_enqueue_style('rg-subtitle-style');

    $css = '
        .rg-subtitle {
            font-family: "Inter", sans-serif;
            font-size: 10.5px;
            font-weight: 500;
            letter-spacing: 0.22em;
            text-transform: uppercase;
            display: block;
            margin-bottom: 0;
        }
        .rg-subtitle--gold {
            color: #C4A35A;
        }
        .rg-subtitle--gold-light {
            color: #D4B870;
        }
        .rg-subtitle--white {
            color: #FFFFFF;
        }
        .rg-subtitle--navy {
            color: #1B2A4A;
        }
        .rg-subtitle-wrapper {
            display: block;
        }
        .rg-subtitle-wrapper--left {
            text-align: left;
        }
        .rg-subtitle-wrapper--center {
            text-align: center;
        }
        .rg-subtitle-wrapper--right {
            text-align: right;
        }
        a.rg-subtitle {
            text-decoration: none;
            color: inherit;
        }
        a.rg-subtitle:hover,
        a.rg-subtitle:focus {
            text-decoration: none;
            color: inherit;
            opacity: 0.85;
        }
        a.rg-subtitle--gold { color: #C4A35A; }
        a.rg-subtitle--gold-light { color: #D4B870; }
        a.rg-subtitle--white { color: #FFFFFF; }
        a.rg-subtitle--navy { color: #1B2A4A; }
    ';

    wp_add_inline_style('rg-subtitle-style', $css);
});

/**
 * Server-side render callback for rg/subtitle block.
 */
function rg_render_subtitle_block($attributes) {
    $text = isset($attributes['text']) ? $attributes['text'] : '';
    $color = isset($attributes['color']) ? strtolower(trim($attributes['color'])) : 'gold';
    $align = isset($attributes['align']) ? strtolower(trim($attributes['align'])) : 'left';
    $url = isset($attributes['url']) ? trim($attributes['url']) : '';
    $link_target = isset($attributes['linkTarget']) ? $attributes['linkTarget'] : '_self';

    if (empty($text)) {
        return '';
    }

    // Validate color
    $allowed_colors = array('gold', 'gold-light', 'white', 'navy');
    if (!in_array($color, $allowed_colors)) {
        $color = 'gold';
    }

    // Validate alignment
    if (!in_array($align, array('left', 'center', 'right'))) {
        $align = 'left';
    }

    // Validate link target
    if (!in_array($link_target, array('_self', '_blank'))) {
        $link_target = '_self';
    }

    // Build the inner content (link or span)
    if (!empty($url)) {
        $rel_attr = $link_target === '_blank' ? ' rel="noopener noreferrer"' : '';
        $inner_html = sprintf(
            '<a href="%s" class="rg-subtitle rg-subtitle--%s" target="%s"%s>%s</a>',
            esc_url($url),
            esc_attr($color),
            esc_attr($link_target),
            $rel_attr,
            esc_html($text)
        );
    } else {
        $inner_html = sprintf(
            '<span class="rg-subtitle rg-subtitle--%s">%s</span>',
            esc_attr($color),
            esc_html($text)
        );
    }

    return sprintf(
        '<div class="rg-subtitle-wrapper rg-subtitle-wrapper--%s">%s</div>',
        esc_attr($align),
        $inner_html
    );
}
