<?php
/**
 * Maringá Faz Mais — funções do tema.
 */

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

define( 'MFM_VERSION', '1.0.0' );
define( 'MFM_DIR', get_template_directory() );
define( 'MFM_URI', get_template_directory_uri() );

// Hardening de segurança fica no plugin "MFM Segurança" (plugin/mfm-seguranca),
// pra proteção não depender do tema ativo.
require_once MFM_DIR . '/inc/options.php';
require_once MFM_DIR . '/inc/home-opcoes.php';
require_once MFM_DIR . '/inc/seo.php';
require_once MFM_DIR . '/inc/obras.php';
require_once MFM_DIR . '/inc/obras-campos.php';
require_once MFM_DIR . '/inc/atualizacoes.php';
require_once MFM_DIR . '/inc/paginas.php';
require_once MFM_DIR . '/inc/migracao-v2.php';

/**
 * Suportes do tema.
 */
function mfm_setup() {
	add_theme_support( 'title-tag' );
	add_theme_support( 'post-thumbnails' );
	add_theme_support( 'html5', array( 'search-form', 'gallery', 'caption', 'style', 'script' ) );
	add_theme_support( 'responsive-embeds' );

	register_nav_menus(
		array(
			'principal' => __( 'Menu principal', 'maringa-faz-mais' ),
		)
	);
}
add_action( 'after_setup_theme', 'mfm_setup' );

/**
 * True quando a landing do dia do lançamento (mock da Fase 2) está em exibição:
 * pela página com o template "Landing Lançamento" ou pela chave de
 * pré-visualização do painel (que troca a home).
 */
function mfm_e_landing_lancamento() {
	return is_page_template( 'page-templates/landing-lancamento.php' )
		|| ( is_front_page() && '1' === mfm_get( 'preview_lancamento' ) );
}

/**
 * True quando a home v2 (escopo jul/2026) está em exibição — a home real,
 * fora da pré-visualização da landing de lançamento.
 */
function mfm_e_home_v2() {
	return is_front_page() && ! mfm_e_landing_lancamento();
}

/**
 * CSS e JS — versionados por filemtime pra invalidar cache a cada deploy.
 * Os assets da landing de lançamento só carregam quando ela está em exibição,
 * pra não pesar a Fase 1 em produção.
 */
function mfm_assets() {
	$css = '/assets/css/main.css';
	$js  = '/assets/js/main.js';

	wp_enqueue_style( 'mfm-main', MFM_URI . $css, array(), (string) filemtime( MFM_DIR . $css ) );
	wp_enqueue_script( 'mfm-main', MFM_URI . $js, array(), (string) filemtime( MFM_DIR . $js ), array( 'strategy' => 'defer' ) );

	if ( mfm_e_landing_lancamento() ) {
		$css_lancamento = '/assets/css/lancamento.css';
		$js_lancamento  = '/assets/js/lancamento.js';

		wp_enqueue_style( 'mfm-lancamento', MFM_URI . $css_lancamento, array( 'mfm-main' ), (string) filemtime( MFM_DIR . $css_lancamento ) );
		wp_enqueue_script( 'mfm-lancamento', MFM_URI . $js_lancamento, array( 'mfm-main' ), (string) filemtime( MFM_DIR . $js_lancamento ), array( 'strategy' => 'defer' ) );
	}

	// Home v2 (escopo jul/2026): estilos/JS próprios + Leaflet vendorizado
	// pro mapa embutido. Os dados dos pins vão inline já prontos pro popup.
	if ( mfm_e_home_v2() ) {
		$css_home = '/assets/css/home.css';
		$js_home  = '/assets/js/home.js';

		wp_enqueue_style( 'mfm-leaflet', MFM_URI . '/assets/vendor/leaflet/leaflet.css', array(), '1.9.4' );
		wp_enqueue_style( 'mfm-home', MFM_URI . $css_home, array( 'mfm-main', 'mfm-leaflet' ), (string) filemtime( MFM_DIR . $css_home ) );

		wp_enqueue_script( 'mfm-leaflet', MFM_URI . '/assets/vendor/leaflet/leaflet.js', array(), '1.9.4', array( 'strategy' => 'defer' ) );
		wp_enqueue_script( 'mfm-home', MFM_URI . $js_home, array( 'mfm-main', 'mfm-leaflet' ), (string) filemtime( MFM_DIR . $js_home ), array( 'strategy' => 'defer' ) );

		wp_add_inline_script( 'mfm-home', 'window.mfmMapa = ' . wp_json_encode( mfm_dados_mapa() ) . ';', 'before' );
	}

	// Páginas da etapa 4 — listagens, ficha da obra, Mapa de Obras, Galeria
	// (e o 404, que usa o mesmo visual de página interna).
	$eh_listagem = mfm_e_listagem_obras() || is_404();
	$eh_ficha    = is_singular( 'obra' );
	$eh_mapa     = is_page_template( 'page-templates/mapa-obras.php' );
	$eh_galeria  = is_page_template( 'page-templates/galeria.php' );

	if ( $eh_listagem || $eh_ficha || $eh_mapa || $eh_galeria ) {
		$css_paginas = '/assets/css/paginas.css';
		$js_paginas  = '/assets/js/paginas.js';
		$deps_css    = array( 'mfm-main' );
		$deps_js     = array( 'mfm-main' );

		// Leaflet só onde há mapa: ficha (mini-mapa) e página Mapa de Obras.
		if ( $eh_ficha || $eh_mapa ) {
			wp_enqueue_style( 'mfm-leaflet', MFM_URI . '/assets/vendor/leaflet/leaflet.css', array(), '1.9.4' );
			wp_enqueue_script( 'mfm-leaflet', MFM_URI . '/assets/vendor/leaflet/leaflet.js', array(), '1.9.4', array( 'strategy' => 'defer' ) );
			$deps_css[] = 'mfm-leaflet';
			$deps_js[]  = 'mfm-leaflet';
		}

		wp_enqueue_style( 'mfm-paginas', MFM_URI . $css_paginas, $deps_css, (string) filemtime( MFM_DIR . $css_paginas ) );
		wp_enqueue_script( 'mfm-paginas', MFM_URI . $js_paginas, $deps_js, (string) filemtime( MFM_DIR . $js_paginas ), array( 'strategy' => 'defer' ) );

		if ( $eh_mapa ) {
			wp_add_inline_script( 'mfm-paginas', 'window.mfmMapa = ' . wp_json_encode( mfm_dados_mapa() ) . ';', 'before' );
		}

		if ( $eh_ficha ) {
			$obra_id = get_queried_object_id();
			wp_add_inline_script(
				'mfm-paginas',
				'window.mfmFicha = ' . wp_json_encode(
					array(
						'lat'    => (float) get_post_meta( $obra_id, 'latitude', true ),
						'lng'    => (float) get_post_meta( $obra_id, 'longitude', true ),
						'status' => (string) get_post_meta( $obra_id, 'status', true ),
						'titulo' => get_the_title( $obra_id ),
					)
				) . ';',
				'before'
			);
		}
	}
}
add_action( 'wp_enqueue_scripts', 'mfm_assets' );

/**
 * Performance: remove scripts/estilos de emoji e embeds que a landing não usa.
 */
function mfm_cleanup_head() {
	remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
	remove_action( 'wp_print_styles', 'print_emoji_styles' );
	remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
	remove_action( 'admin_print_styles', 'print_emoji_styles' );
	remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
	remove_action( 'wp_head', 'wp_oembed_add_host_js' );
	remove_action( 'wp_head', 'rsd_link' );
	remove_action( 'wp_head', 'wlwmanifest_link' );
	remove_action( 'wp_head', 'wp_shortlink_wp_head' );
}
add_action( 'init', 'mfm_cleanup_head' );

/**
 * Fallback do menu principal enquanto a SECOM não monta um menu no painel —
 * a estrutura do escopo jul/2026: Início · Obras (submenu por status) ·
 * Regiões (submenu por região) · Áreas (submenu por eixo) · Mapa de Obras ·
 * Galeria. O markup imita o do wp_nav_menu (li.menu-item-has-children +
 * ul.sub-menu) pro CSS/JS do dropdown valer também pra um menu real.
 */
function mfm_menu_fallback() {
	$listagem = mfm_url_listagem();

	$por_status = array();
	foreach ( mfm_status_rotulos() as $status => $rotulo ) {
		$por_status[] = array(
			'rotulo' => $rotulo,
			'url'    => add_query_arg( 'status', $status, $listagem ),
		);
	}

	// Regiões e áreas na ordem fixa do escopo (get_terms devolveria alfabético).
	$por_termo = function ( $nomes, $taxonomia ) {
		$itens = array();
		foreach ( $nomes as $nome ) {
			$termo = get_term_by( 'name', $nome, $taxonomia );
			if ( ! $termo instanceof WP_Term ) {
				continue;
			}
			$link = get_term_link( $termo );
			if ( ! is_wp_error( $link ) ) {
				$itens[] = array(
					'rotulo' => $nome,
					'url'    => $link,
				);
			}
		}
		return $itens;
	};

	$itens = array(
		array( 'rotulo' => 'Início', 'url' => home_url( '/' ) ),
		array( 'rotulo' => 'Obras', 'url' => $listagem, 'filhos' => $por_status ),
		array( 'rotulo' => 'Regiões', 'url' => $listagem, 'filhos' => $por_termo( mfm_regioes_fixas(), 'regiao' ) ),
		array( 'rotulo' => 'Áreas', 'url' => $listagem, 'filhos' => $por_termo( mfm_eixos_fixos(), 'eixo' ) ),
		array( 'rotulo' => 'Mapa de Obras', 'url' => mfm_url_mapa() ),
		array( 'rotulo' => 'Galeria', 'url' => mfm_url_galeria() ),
	);

	echo '<ul class="mfm-menu">';
	foreach ( $itens as $item ) {
		$tem_filhos = ! empty( $item['filhos'] );
		printf(
			'<li%s><a href="%s">%s</a>',
			$tem_filhos ? ' class="menu-item-has-children"' : '',
			esc_url( $item['url'] ),
			esc_html( $item['rotulo'] )
		);
		if ( $tem_filhos ) {
			echo '<ul class="sub-menu">';
			foreach ( $item['filhos'] as $filho ) {
				printf( '<li><a href="%s">%s</a></li>', esc_url( $filho['url'] ), esc_html( $filho['rotulo'] ) );
			}
			echo '</ul>';
		}
		echo '</li>';
	}
	echo '</ul>';
}
