<?php
/**
 * Painel "Maringá Faz Mais" — conteúdo da landing editável pela SECOM
 * sem depender de plugin (Settings API nativa do WordPress).
 */

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

const MFM_OPTION = 'mfm_config';

/**
 * Valores padrão (conteúdo de lançamento).
 */
function mfm_defaults() {
	return array(
		// Home v2 — texto fixo sobre o banner rotativo.
		'banner_titulo'   => 'Maringá Faz Mais',
		'banner_contexto' => 'É o maior programa de obras e serviços da história da cidade. Aqui você acompanha cada obra: o que está sendo feito, onde, quanto custa e quando fica pronto.',

		// Obras — nomes exibidos dos status (vazio = padrão) e lista de áreas.
		'status_rotulos'  => array(),
		'eixos'           => '',

		'hero_titulo'       => 'EM BREVE VOCÊ ACOMPANHARÁ AQUI TODAS AS OBRAS',
		'hero_poster'       => '',
		'hero_loop'         => '',
		'hero_video_full'   => '',
		'numeros'           => implode( "\n", array(
			'320+|Vias pavimentadas',
			'18k+|Atendimentos saúde',
			'R$1M+|Aeroporto',
			'500|Óculos entregues',
			'100+|Obras ativas',
			'40+|Praças revitalizadas',
			'12+|Escolas em reforma',
			'7k+|Alunos na rede municipal',
			'25km+|Novas ciclovias',
			'3k+|Luminárias de LED',
			'15+|UBSs modernizadas',
			'60+|Ônibus renovados',
			'200+|Câmeras de monitoramento',
			'9+|CMEIs em construção',
			'1,2k+|Moradias em andamento',
			'30+|Quadras esportivas',
			'80k+|Mudas plantadas',
			'45+|Academias ao ar livre',
			'500+|Novas vagas em creches',
			'70+|Bairros atendidos',
		) ),
		'fechamento_titulo' => 'Em breve você acompanhará aqui todas as obras e serviços da cidade',
		'fechamento_sub'    => 'Obrômetro Maringá Faz Mais · Lançamento Fase 2 — 05/08',
		'seo_descricao'     => 'Acompanhe as obras e serviços da Prefeitura de Maringá em todos os bairros. Mapa com as obras, valores, números atualizados. Obrômetro chegando em Agosto/2026',
		'og_image'          => '',
		'rede_facebook'     => '#',
		'rede_instagram'    => '#',
		'rede_tiktok'       => '#',
		'rede_x'            => '#',
		'rede_youtube'      => '#',

		// Pré-visualização: '1' troca a home pela landing do dia do lançamento (mock da Fase 2).
		'preview_lancamento' => '',
	);
}

/**
 * Lê uma opção da campanha com fallback pro padrão.
 */
function mfm_get( $chave ) {
	$config = wp_parse_args( (array) get_option( MFM_OPTION, array() ), mfm_defaults() );
	return isset( $config[ $chave ] ) ? $config[ $chave ] : '';
}

/**
 * Números da faixa, já parseados: cada linha "numero|descricao".
 */
function mfm_get_numeros() {
	$linhas  = preg_split( '/\r\n|\r|\n/', (string) mfm_get( 'numeros' ) );
	$numeros = array();
	foreach ( $linhas as $linha ) {
		$partes = array_map( 'trim', explode( '|', $linha, 2 ) );
		if ( '' === $partes[0] ) {
			continue;
		}
		$numeros[] = array(
			'valor'     => $partes[0],
			'descricao' => isset( $partes[1] ) ? $partes[1] : '',
		);
	}
	return $numeros;
}

/**
 * Menu no admin.
 */
function mfm_admin_menu() {
	add_menu_page(
		'Maringá Faz Mais',
		'Maringá Faz Mais',
		'manage_options',
		'mfm-config',
		'mfm_render_admin_page',
		'dashicons-hammer',
		3
	);
}
add_action( 'admin_menu', 'mfm_admin_menu' );

function mfm_register_settings() {
	register_setting(
		'mfm_config_group',
		MFM_OPTION,
		array( 'sanitize_callback' => 'mfm_sanitize_config' )
	);
}
add_action( 'admin_init', 'mfm_register_settings' );

/**
 * Sanitização de tudo que a SECOM digita.
 */
function mfm_sanitize_config( $entrada ) {
	$entrada = (array) $entrada;
	$limpo   = array();

	$campos_texto = array( 'banner_titulo', 'hero_titulo', 'fechamento_titulo', 'fechamento_sub', 'seo_descricao' );
	foreach ( $campos_texto as $campo ) {
		$limpo[ $campo ] = sanitize_text_field( $entrada[ $campo ] ?? '' );
	}

	$limpo['banner_contexto'] = sanitize_textarea_field( $entrada['banner_contexto'] ?? '' );
	$limpo['eixos']           = sanitize_textarea_field( $entrada['eixos'] ?? '' );

	// Rótulos dos status: só as 5 chaves fixas entram; vazio = nome padrão.
	$limpo['status_rotulos'] = array();
	foreach ( array_keys( MFM_STATUS_ROTULOS ) as $chave ) {
		$limpo['status_rotulos'][ $chave ] = sanitize_text_field( $entrada['status_rotulos'][ $chave ] ?? '' );
	}

	$campos_url = array( 'hero_poster', 'hero_loop', 'hero_video_full', 'og_image', 'rede_facebook', 'rede_instagram', 'rede_tiktok', 'rede_x', 'rede_youtube' );
	foreach ( $campos_url as $campo ) {
		$valor           = trim( (string) ( $entrada[ $campo ] ?? '' ) );
		$limpo[ $campo ] = ( '' === $valor || '#' === $valor ) ? $valor : esc_url_raw( $valor );
	}

	$limpo['numeros'] = sanitize_textarea_field( $entrada['numeros'] ?? '' );

	// Checkbox: desmarcado não vem no POST, então empty() cobre os dois casos.
	$limpo['preview_lancamento'] = empty( $entrada['preview_lancamento'] ) ? '' : '1';

	return $limpo;
}

/**
 * Área nova na lista do painel vira termo da taxonomia na hora — filtros,
 * menus e mapa leem tudo de mfm_eixos_fixos(), então já aparecem com ela.
 */
function mfm_config_semeia_eixos() {
	if ( ! taxonomy_exists( 'eixo' ) ) {
		return;
	}
	foreach ( mfm_eixos_fixos() as $eixo ) {
		if ( ! term_exists( $eixo, 'eixo' ) ) {
			wp_insert_term( $eixo, 'eixo' );
		}
	}
}
add_action( 'update_option_' . MFM_OPTION, 'mfm_config_semeia_eixos' );

/**
 * Seletor da biblioteca de mídia nos campos de URL marcados.
 */
function mfm_admin_assets( $hook ) {
	if ( 'toplevel_page_mfm-config' !== $hook ) {
		return;
	}
	wp_enqueue_media();
	wp_enqueue_script( 'mfm-admin', MFM_URI . '/assets/js/admin.js', array( 'jquery' ), MFM_VERSION, true );
}
add_action( 'admin_enqueue_scripts', 'mfm_admin_assets' );

/**
 * Campo de URL com botão "Escolher da biblioteca".
 */
function mfm_campo_midia( $nome, $valor, $descricao ) {
	printf(
		'<input type="url" class="regular-text" id="mfm-%1$s" name="%2$s[%1$s]" value="%3$s">
		<button type="button" class="button mfm-escolher-midia" data-alvo="mfm-%1$s">Escolher da biblioteca</button>
		<p class="description">%4$s</p>',
		esc_attr( $nome ),
		esc_attr( MFM_OPTION ),
		esc_attr( $valor ),
		esc_html( $descricao )
	);
}

/**
 * Página de configuração.
 */
function mfm_render_admin_page() {
	if ( ! current_user_can( 'manage_options' ) ) {
		return;
	}
	$c = wp_parse_args( (array) get_option( MFM_OPTION, array() ), mfm_defaults() );
	?>
	<div class="wrap">
		<h1>Maringá Faz Mais — Conteúdo da página</h1>
		<form method="post" action="options.php">
			<?php settings_fields( 'mfm_config_group' ); ?>

			<h2>Pré-visualização (uso interno)</h2>
			<table class="form-table" role="presentation">
				<tr>
					<th scope="row">Landing do lançamento</th>
					<td>
						<label for="mfm-preview_lancamento">
							<input type="checkbox" id="mfm-preview_lancamento" name="<?php echo esc_attr( MFM_OPTION ); ?>[preview_lancamento]" value="1" <?php checked( '1', $c['preview_lancamento'] ); ?>>
							Exibir na home a landing do dia do lançamento (Obrômetro)
						</label>
						<p class="description">Atenção: troca a página inicial pública pelo modelo da Fase 2, ainda com dados fictícios. Deixe desmarcado até o dia do lançamento.</p>
					</td>
				</tr>
			</table>

			<h2>Home — texto sobre o banner</h2>
			<table class="form-table" role="presentation">
				<tr>
					<th scope="row"><label for="mfm-banner_titulo">Título</label></th>
					<td>
						<input type="text" class="large-text" id="mfm-banner_titulo" name="<?php echo esc_attr( MFM_OPTION ); ?>[banner_titulo]" value="<?php echo esc_attr( $c['banner_titulo'] ); ?>" maxlength="60">
						<p class="description">O título entre as chaves verdes, fixo sobre as fotos do banner rotativo.</p>
					</td>
				</tr>
				<tr>
					<th scope="row"><label for="mfm-banner_contexto">Texto de apresentação</label></th>
					<td>
						<textarea id="mfm-banner_contexto" name="<?php echo esc_attr( MFM_OPTION ); ?>[banner_contexto]" rows="3" class="large-text"><?php echo esc_textarea( $c['banner_contexto'] ); ?></textarea>
						<p class="description">Parágrafo abaixo do título, antes dos botões "Conheça as obras" e "Acesse o mapa".</p>
					</td>
				</tr>
			</table>

			<h2>Obras — nomes dos status</h2>
			<p class="description">O valor interno de cada status é fixo (cores, carimbo de entregue e contadores dependem dele) — aqui muda só o nome exibido no site. Vazio = nome padrão.</p>
			<table class="form-table" role="presentation">
				<?php foreach ( MFM_STATUS_ROTULOS as $mfm_chave => $mfm_padrao ) : ?>
					<tr>
						<th scope="row"><label for="mfm-status-<?php echo esc_attr( $mfm_chave ); ?>"><?php echo esc_html( $mfm_padrao ); ?></label></th>
						<td><input type="text" class="regular-text" id="mfm-status-<?php echo esc_attr( $mfm_chave ); ?>" name="<?php echo esc_attr( MFM_OPTION ); ?>[status_rotulos][<?php echo esc_attr( $mfm_chave ); ?>]" value="<?php echo esc_attr( (string) ( $c['status_rotulos'][ $mfm_chave ] ?? '' ) ); ?>" placeholder="<?php echo esc_attr( $mfm_padrao ); ?>"></td>
					</tr>
				<?php endforeach; ?>
			</table>

			<h2>Obras — áreas (eixos)</h2>
			<table class="form-table" role="presentation">
				<tr>
					<th scope="row"><label for="mfm-eixos">Lista de áreas</label></th>
					<td>
						<textarea id="mfm-eixos" name="<?php echo esc_attr( MFM_OPTION ); ?>[eixos]" rows="9" class="large-text code"><?php echo esc_textarea( '' !== trim( (string) $c['eixos'] ) ? $c['eixos'] : implode( "\n", mfm_eixos_fixos() ) ); ?></textarea>
						<p class="description">Uma área por linha, na ordem de exibição dos filtros e do menu. Área nova é criada automaticamente ao salvar. <strong>Atenção:</strong> renomear uma linha cria uma área nova — as obras da área antiga precisam ser reatribuídas no cadastro.</p>
					</td>
				</tr>
			</table>

			<h2>Vídeo de abertura (hero)</h2>
			<table class="form-table" role="presentation">
				<tr>
					<th scope="row"><label for="mfm-hero_titulo">Chamada em destaque</label></th>
					<td><input type="text" class="large-text" id="mfm-hero_titulo" name="<?php echo esc_attr( MFM_OPTION ); ?>[hero_titulo]" value="<?php echo esc_attr( $c['hero_titulo'] ); ?>"></td>
				</tr>
				<tr>
					<th scope="row"><label for="mfm-hero_poster">Imagem de capa (poster)</label></th>
					<td><?php mfm_campo_midia( 'hero_poster', $c['hero_poster'], 'Imagem exibida enquanto o vídeo carrega. Recomendado: JPG/WebP 1920×1080, menos de 200 KB.' ); ?></td>
				</tr>
				<tr>
					<th scope="row"><label for="mfm-hero_loop">Vídeo curto em loop</label></th>
					<td><?php mfm_campo_midia( 'hero_loop', $c['hero_loop'], 'MP4 sem áudio, menos de 2 MB. Fica repetindo no fundo da abertura.' ); ?></td>
				</tr>
				<tr>
					<th scope="row"><label for="mfm-hero_video_full">Vídeo completo do prefeito</label></th>
					<td><?php mfm_campo_midia( 'hero_video_full', $c['hero_video_full'], 'Abre quando o visitante clica em "Assistir". Pode ser MP4 da biblioteca ou link do YouTube.' ); ?></td>
				</tr>
			</table>

			<h2>Faixa de números</h2>
			<table class="form-table" role="presentation">
				<tr>
					<th scope="row"><label for="mfm-numeros">Números da campanha</label></th>
					<td>
						<textarea id="mfm-numeros" name="<?php echo esc_attr( MFM_OPTION ); ?>[numeros]" rows="22" class="large-text code"><?php echo esc_textarea( $c['numeros'] ); ?></textarea>
						<p class="description">Um número por linha, no formato <code>número|descrição</code>. Exemplo: <code>+320|vias pavimentadas</code>. A página exibe na ordem desta lista.</p>
					</td>
				</tr>
			</table>

			<h2>Faixa de fechamento</h2>
			<table class="form-table" role="presentation">
				<tr>
					<th scope="row"><label for="mfm-fechamento_titulo">Frase principal</label></th>
					<td><input type="text" class="large-text" id="mfm-fechamento_titulo" name="<?php echo esc_attr( MFM_OPTION ); ?>[fechamento_titulo]" value="<?php echo esc_attr( $c['fechamento_titulo'] ); ?>"></td>
				</tr>
				<tr>
					<th scope="row"><label for="mfm-fechamento_sub">Subtexto</label></th>
					<td><input type="text" class="large-text" id="mfm-fechamento_sub" name="<?php echo esc_attr( MFM_OPTION ); ?>[fechamento_sub]" value="<?php echo esc_attr( $c['fechamento_sub'] ); ?>"></td>
				</tr>
			</table>

			<h2>Compartilhamento (SEO / redes sociais)</h2>
			<table class="form-table" role="presentation">
				<tr>
					<th scope="row"><label for="mfm-seo_descricao">Descrição do site</label></th>
					<td>
						<input type="text" class="large-text" id="mfm-seo_descricao" name="<?php echo esc_attr( MFM_OPTION ); ?>[seo_descricao]" value="<?php echo esc_attr( $c['seo_descricao'] ); ?>" maxlength="160">
						<p class="description">Aparece no Google e na prévia de compartilhamento. Máximo de 160 caracteres.</p>
					</td>
				</tr>
				<tr>
					<th scope="row"><label for="mfm-og_image">Imagem de compartilhamento</label></th>
					<td><?php mfm_campo_midia( 'og_image', $c['og_image'], 'Prévia exibida no WhatsApp/Instagram ao compartilhar o link. Recomendado: 1200×630.' ); ?></td>
				</tr>
			</table>

			<h2>Redes sociais (rodapé)</h2>
			<p class="description">Todos opcionais — deixe em branco pra esconder o ícone no rodapé.</p>
			<table class="form-table" role="presentation">
				<?php
				$redes = array(
					'rede_facebook'  => 'Facebook',
					'rede_instagram' => 'Instagram',
					'rede_tiktok'    => 'TikTok',
					'rede_x'         => 'X (Twitter)',
					'rede_youtube'   => 'YouTube',
				);
				foreach ( $redes as $chave => $rotulo ) :
					?>
					<tr>
						<th scope="row"><label for="mfm-<?php echo esc_attr( $chave ); ?>"><?php echo esc_html( $rotulo ); ?></label></th>
						<td><input type="text" class="regular-text" id="mfm-<?php echo esc_attr( $chave ); ?>" name="<?php echo esc_attr( MFM_OPTION ); ?>[<?php echo esc_attr( $chave ); ?>]" value="<?php echo esc_attr( $c[ $chave ] ); ?>" placeholder="https://…"></td>
					</tr>
				<?php endforeach; ?>
			</table>

			<?php submit_button( 'Salvar alterações' ); ?>
		</form>
	</div>
	<?php
}
