<?php
/**
 * Conteúdo da home (escopo jul/2026) — banners rotativos, 4 grandes
 * números, vídeo da campanha e itens da galeria do site, gerenciados
 * numa página de opções do ACF/SCF ("Home" no menu do admin).
 *
 * Capability edit_obras: quem cadastra obra gerencia a home — a SECOM
 * entra sem ganhar manage_options (o painel antigo "Maringá Faz Mais"
 * de inc/options.php segue só do administrador). Campos registrados em
 * código, no mesmo padrão de obras-campos.php.
 *
 * O front da home (etapa 3) consome os helpers mfm_home_*() daqui e
 * mfm_obras_destaque() de inc/obras.php — nada aqui imprime HTML público.
 */

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

function mfm_registra_pagina_home() {
	if ( ! function_exists( 'acf_add_options_page' ) ) {
		return;
	}

	acf_add_options_page(
		array(
			'page_title'      => 'Conteúdo da home',
			'menu_title'      => 'Home',
			'menu_slug'       => 'mfm-home',
			'capability'      => 'edit_obras',
			'position'        => '3.7', // Entre o Painel e Obras; não colide com o "Maringá Faz Mais" (3).
			'icon_url'        => 'dashicons-admin-home',
			'redirect'        => false,
			'update_button'   => 'Salvar alterações',
			'updated_message' => 'Conteúdo da home atualizado.',
		)
	);
}
add_action( 'acf/init', 'mfm_registra_pagina_home' );

/**
 * Aba "Obras em destaque": o destaque é escolhido no cadastro da obra
 * (boolean "Obra em destaque"); aqui a SECOM só enxerga quais 4 estão
 * valendo na home. Montada apenas dentro da própria página, pra não
 * pesar os outros carregamentos do admin.
 */
function mfm_home_mensagem_destaques() {
	if ( ! is_admin() || 'mfm-home' !== sanitize_key( $_GET['page'] ?? '' ) || ! function_exists( 'mfm_obras_destaque' ) ) {
		return '';
	}

	$html = '<strong>As obras em destaque são marcadas no cadastro de cada obra</strong> (botão "Obra em destaque"). '
		. 'A home exibe no máximo <strong>4</strong> — as movimentadas mais recentemente primeiro: '
		. 'cadastrar uma atualização ou editar a obra (%, status, etapa…) leva ela pro topo. Hoje entram nos cards:';

	$obras = mfm_obras_destaque();
	if ( ! $obras ) {
		$html .= '<p><em>Nenhuma obra marcada como destaque ainda.</em></p>';
	} else {
		$html .= '<ol class="mfm-destaques-lista">';
		foreach ( $obras as $obra ) {
			$html .= sprintf(
				'<li><a href="%s">%s</a></li>',
				esc_url( (string) get_edit_post_link( $obra->ID ) ),
				esc_html( get_the_title( $obra ) )
			);
		}
		$html .= '</ol>';
	}

	$html .= sprintf(
		'<p><a class="button" href="%s">Gerenciar obras</a></p>',
		esc_url( admin_url( 'edit.php?post_type=obra' ) )
	);

	return $html;
}

function mfm_registra_campos_home() {
	if ( ! function_exists( 'acf_add_local_field_group' ) ) {
		return;
	}

	acf_add_local_field_group(
		array(
			'key'      => 'group_mfm_home',
			'title'    => 'Conteúdo da home',
			'location' => array(
				array(
					array(
						'param'    => 'options_page',
						'operator' => '==',
						'value'    => 'mfm-home',
					),
				),
			),
			'fields'   => array(

				// ----- Banners rotativos ---------------------------------
				array(
					'key'       => 'field_mfm_home_tab_banners',
					'label'     => 'Banners rotativos',
					'type'      => 'tab',
					'placement' => 'top',
				),
				array(
					'key'          => 'field_mfm_home_banners',
					'name'         => 'banners',
					'label'        => 'Banners do topo',
					'type'         => 'repeater',
					'instructions' => 'Chamadas da campanha que giram no topo da home, na ordem desta lista (arraste pra reordenar). Recomendado: imagem horizontal 1920×820, WebP ou JPG.',
					'layout'       => 'block',
					'button_label' => 'Adicionar banner',
					'sub_fields'   => array(
						array(
							'key'           => 'field_mfm_home_banner_imagem',
							'name'          => 'imagem',
							'label'         => 'Imagem',
							'type'          => 'image',
							'return_format' => 'id',
							'preview_size'  => 'medium',
							'mime_types'    => 'jpg, jpeg, png, webp',
							'required'      => 1,
							'wrapper'       => array( 'width' => '34' ),
						),
						array(
							'key'          => 'field_mfm_home_banner_chamada',
							'name'         => 'chamada',
							'label'        => 'Chamada (opcional)',
							'type'         => 'textarea',
							'instructions' => 'Frase exibida sobre a imagem, girando junto com o banner — Enter quebra a linha no banner. Ex.: "O maior programa de obras da nossa história". Vazia, vale o título fixo do painel "Maringá Faz Mais".',
							'maxlength'    => 120,
							'rows'         => 3,
							'new_lines'    => '', // devolve o texto cru; o template converte \n em <br>.
							'wrapper'      => array( 'width' => '33' ),
						),
						array(
							'key'          => 'field_mfm_home_banner_link',
							'name'         => 'link',
							'label'        => 'Link (opcional)',
							'type'         => 'text',
							'instructions' => 'Pra onde a foto leva ao clicar. Pode ser interno (ex.: /obras) ou completo (https://…).',
							'wrapper'      => array( 'width' => '33' ),
						),
					),
				),

				// ----- Grandes números -----------------------------------
				array(
					'key'       => 'field_mfm_home_tab_numeros',
					'label'     => 'Grandes números',
					'type'      => 'tab',
					'placement' => 'top',
				),
				array(
					'key'          => 'field_mfm_home_numeros_apoio',
					'name'         => 'numeros_apoio',
					'label'        => 'Texto de apoio (opcional)',
					'type'         => 'text',
					'instructions' => 'Frase exibida logo abaixo do título da seção. Ex.: "Investimento histórico que transforma a cidade e melhora a vida das pessoas."',
					'maxlength'    => 140,
				),
				array(
					'key'          => 'field_mfm_home_numeros',
					'name'         => 'grandes_numeros',
					'label'        => 'Principais números do programa',
					'type'         => 'repeater',
					'instructions' => 'Os 4 números grandes da home, com animação de contagem ao entrar na tela. O valor aceita sufixo — ex.: 320+, R$ 1,2 bi.',
					'layout'       => 'table',
					'button_label' => 'Adicionar número',
					'min'          => 4,
					'max'          => 4,
					'sub_fields'   => array(
						array(
							'key'          => 'field_mfm_home_numero_valor',
							'name'         => 'valor',
							'label'        => 'Valor',
							'type'         => 'text',
							'instructions' => 'Ex.: 320+',
							'maxlength'    => 20,
							'wrapper'      => array( 'width' => '25' ),
						),
						array(
							'key'          => 'field_mfm_home_numero_rotulo',
							'name'         => 'rotulo',
							'label'        => 'Rótulo',
							'type'         => 'text',
							'instructions' => 'Ex.: vias pavimentadas',
							'maxlength'    => 60,
							'wrapper'      => array( 'width' => '30' ),
						),
						array(
							'key'          => 'field_mfm_home_numero_descricao',
							'name'         => 'descricao',
							'label'        => 'Descrição (opcional)',
							'type'         => 'text',
							'instructions' => 'Frase curta sob o rótulo. Ex.: "Mais mobilidade e segurança para toda a cidade."',
							'maxlength'    => 120,
							'wrapper'      => array( 'width' => '45' ),
						),
					),
				),
				array(
					'key'          => 'field_mfm_home_numeros_fechamento',
					'name'         => 'numeros_fechamento',
					'label'        => 'Frase de fechamento (opcional)',
					'type'         => 'text',
					'instructions' => 'Faixa azul arredondada no fim da seção. Ex.: "Seguimos avançando, com planejamento e trabalho, para construir uma cidade cada vez melhor para todos."',
					'maxlength'    => 180,
				),

				// ----- Obras em destaque (informativo) -------------------
				array(
					'key'       => 'field_mfm_home_tab_destaques',
					'label'     => 'Obras em destaque',
					'type'      => 'tab',
					'placement' => 'top',
				),
				array(
					'key'      => 'field_mfm_home_destaques',
					'label'    => '',
					'type'     => 'message',
					'message'  => mfm_home_mensagem_destaques(),
					'esc_html' => 0,
					'wrapper'  => array( 'class' => 'mfm-aviso-destaques' ),
				),

				// ----- Vídeo da campanha ---------------------------------
				array(
					'key'       => 'field_mfm_home_tab_video',
					'label'     => 'Vídeo da campanha',
					'type'      => 'tab',
					'placement' => 'top',
				),
				array(
					'key'           => 'field_mfm_home_video_poster',
					'name'          => 'video_campanha_poster',
					'label'         => 'Poster (capa do vídeo)',
					'type'          => 'image',
					'instructions'  => 'Imagem exibida antes do play — o vídeo só toca sob clique, nunca sozinho. Recomendado: 1280×720, WebP ou JPG.',
					'return_format' => 'id',
					'preview_size'  => 'medium',
					'mime_types'    => 'jpg, jpeg, png, webp',
				),
				array(
					'key'           => 'field_mfm_home_video_arquivo',
					'name'          => 'video_campanha_arquivo',
					'label'         => 'Arquivo MP4',
					'type'          => 'file',
					'instructions'  => 'Envie o MP4 da campanha…',
					'return_format' => 'url',
					'mime_types'    => 'mp4',
					'wrapper'       => array( 'width' => '50' ),
				),
				array(
					'key'          => 'field_mfm_home_video_url',
					'name'         => 'video_campanha_url',
					'label'        => 'ou link do vídeo',
					'type'         => 'url',
					'instructions' => '…ou cole um link do YouTube (um dos dois).',
					'wrapper'      => array( 'width' => '50' ),
				),

				// ----- Galeria do site -----------------------------------
				array(
					'key'       => 'field_mfm_home_tab_galeria',
					'label'     => 'Galeria do site',
					'type'      => 'tab',
					'placement' => 'top',
				),
				array(
					'key'          => 'field_mfm_home_galeria',
					'name'         => 'galeria_site',
					'label'        => 'Fotos e vídeos do programa',
					'type'         => 'repeater',
					'instructions' => 'Itens extras da página Galeria — as fotos cadastradas no campo "Fotos" de cada obra já entram lá sozinhas; use esta lista pra vídeos e fotos avulsas do programa. Vincule cada item a uma obra pra alimentar a busca e os filtros por região/área.',
					'layout'       => 'block',
					'button_label' => 'Adicionar item',
					'sub_fields'   => array(
						array(
							'key'           => 'field_mfm_home_gal_tipo',
							'name'          => 'tipo',
							'label'         => 'Tipo',
							'type'          => 'button_group',
							'choices'       => array(
								'foto'  => 'Foto',
								'video' => 'Vídeo',
							),
							'default_value' => 'foto',
							'wrapper'       => array( 'width' => '25' ),
						),
						array(
							'key'           => 'field_mfm_home_gal_imagem',
							'name'          => 'imagem',
							'label'         => 'Imagem',
							'type'          => 'image',
							'instructions'  => 'A foto do item — no vídeo, é a capa exibida antes do play.',
							'return_format' => 'id',
							'preview_size'  => 'medium',
							'mime_types'    => 'jpg, jpeg, png, webp',
							'wrapper'       => array( 'width' => '25' ),
						),
						array(
							'key'               => 'field_mfm_home_gal_video_arquivo',
							'name'              => 'video_arquivo',
							'label'             => 'Arquivo MP4',
							'type'              => 'file',
							'return_format'     => 'url',
							'mime_types'        => 'mp4',
							'wrapper'           => array( 'width' => '25' ),
							'conditional_logic' => array(
								array(
									array(
										'field'    => 'field_mfm_home_gal_tipo',
										'operator' => '==',
										'value'    => 'video',
									),
								),
							),
						),
						array(
							'key'               => 'field_mfm_home_gal_video_url',
							'name'              => 'video_url',
							'label'             => 'ou link do YouTube',
							'type'              => 'url',
							'wrapper'           => array( 'width' => '25' ),
							'conditional_logic' => array(
								array(
									array(
										'field'    => 'field_mfm_home_gal_tipo',
										'operator' => '==',
										'value'    => 'video',
									),
								),
							),
						),
						array(
							'key'       => 'field_mfm_home_gal_legenda',
							'name'      => 'legenda',
							'label'     => 'Legenda (opcional)',
							'type'      => 'text',
							'maxlength' => 160,
							'wrapper'   => array( 'width' => '50' ),
						),
						array(
							'key'           => 'field_mfm_home_gal_obra',
							'name'          => 'obra_relacionada',
							'label'         => 'Obra relacionada (opcional)',
							'type'          => 'post_object',
							'instructions'  => 'Liga o item a uma obra — alimenta o filtro por obra/eixo da página Galeria.',
							'post_type'     => array( 'obra' ),
							'return_format' => 'id',
							'allow_null'    => 1,
							'wrapper'       => array( 'width' => '50' ),
						),
					),
				),
			),
		)
	);
}
add_action( 'acf/init', 'mfm_registra_campos_home' );

/**
 * Identidade da campanha na página (mesmo CSS das telas de obra).
 */
function mfm_home_admin_assets( $hook ) {
	if ( 'toplevel_page_mfm-home' !== $hook ) {
		return;
	}
	wp_enqueue_style(
		'mfm-admin-obra',
		MFM_URI . '/assets/css/admin-obra.css',
		array(),
		(string) filemtime( MFM_DIR . '/assets/css/admin-obra.css' )
	);
}
add_action( 'admin_enqueue_scripts', 'mfm_home_admin_assets' );

/* -------------------------------------------------------------------------
 * Helpers pro front da home (etapa 3) — devolvem só linhas completas, já
 * normalizadas, pra o template não ter que validar campo a campo.
 * ---------------------------------------------------------------------- */

/**
 * Banners rotativos: [ [ 'imagem' => id, 'chamada' => str, 'link' => str ], … ].
 * A chamada gira com o slide; vazia, o template usa o título fixo do painel
 * "Maringá Faz Mais" (contexto e CTAs continuam fixos).
 */
function mfm_home_banners() {
	$linhas  = function_exists( 'get_field' ) ? (array) get_field( 'banners', 'option' ) : array();
	$banners = array();
	foreach ( $linhas as $linha ) {
		if ( empty( $linha['imagem'] ) ) {
			continue;
		}
		$banners[] = array(
			'imagem'  => (int) $linha['imagem'],
			'chamada' => trim( (string) ( $linha['chamada'] ?? '' ) ),
			'link'    => (string) ( $linha['link'] ?? '' ),
		);
	}
	return $banners;
}

/**
 * Grandes números: [ [ 'valor' => str, 'rotulo' => str ], … ] — no máximo 4.
 */
function mfm_home_numeros() {
	$linhas  = function_exists( 'get_field' ) ? (array) get_field( 'grandes_numeros', 'option' ) : array();
	$numeros = array();
	foreach ( $linhas as $linha ) {
		$valor = trim( (string) ( $linha['valor'] ?? '' ) );
		if ( '' === $valor ) {
			continue;
		}
		$numeros[] = array(
			'valor'     => $valor,
			'rotulo'    => (string) ( $linha['rotulo'] ?? '' ),
			'descricao' => trim( (string) ( $linha['descricao'] ?? '' ) ),
		);
	}
	return array_slice( $numeros, 0, 4 );
}

/**
 * Vídeo da campanha: [ 'poster' => id, 'arquivo' => url, 'url' => str ].
 */
function mfm_home_video() {
	if ( ! function_exists( 'get_field' ) ) {
		return array( 'poster' => 0, 'arquivo' => '', 'url' => '' );
	}
	return array(
		'poster'  => (int) get_field( 'video_campanha_poster', 'option' ),
		'arquivo' => (string) get_field( 'video_campanha_arquivo', 'option' ),
		'url'     => (string) get_field( 'video_campanha_url', 'option' ),
	);
}

/**
 * Galeria do site: linhas com tipo, imagem (id), video_arquivo/video_url,
 * legenda e obra (id) — descarta linha sem mídia nenhuma.
 */
function mfm_home_galeria() {
	$linhas = function_exists( 'get_field' ) ? (array) get_field( 'galeria_site', 'option' ) : array();
	$itens  = array();
	foreach ( $linhas as $linha ) {
		$item = array(
			'tipo'          => 'video' === ( $linha['tipo'] ?? '' ) ? 'video' : 'foto',
			'imagem'        => (int) ( $linha['imagem'] ?? 0 ),
			'video_arquivo' => (string) ( $linha['video_arquivo'] ?? '' ),
			'video_url'     => (string) ( $linha['video_url'] ?? '' ),
			'legenda'       => (string) ( $linha['legenda'] ?? '' ),
			'obra'          => (int) ( $linha['obra_relacionada'] ?? 0 ),
		);
		if ( ! $item['imagem'] && ! $item['video_arquivo'] && ! $item['video_url'] ) {
			continue;
		}
		$itens[] = $item;
	}
	return $itens;
}
