<?php
/**
 * SEO e Open Graph.
 *
 * Fase 1: tags da landing (title, description, OG, Twitter Card, favicon).
 * Fase 2: páginas de obra (CPT "obra") já saem com OG dinâmico — título da
 * obra, descritivo breve e foto de capa — sem precisar mexer aqui.
 */

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

/**
 * Dados de SEO da requisição atual: título, descrição, imagem e URL.
 *
 * Página de obra (Fase 2): usa o título do post, o campo ACF
 * "descritivo_breve" (fallback: resumo) e a imagem destacada.
 * Demais páginas: dados do painel Maringá Faz Mais.
 */
function mfm_seo_dados() {
	$padrao = array(
		'titulo'    => wp_get_document_title(),
		'descricao' => mfm_get( 'seo_descricao' ),
		'imagem'    => mfm_get( 'og_image' ) ? mfm_get( 'og_image' ) : MFM_URI . '/assets/img/og-padrao.png',
		'url'       => mfm_seo_url_atual(),
	);

	if ( is_singular( 'obra' ) ) {
		$obra_id = get_the_ID();

		$descricao = function_exists( 'get_field' ) ? (string) get_field( 'descritivo_breve', $obra_id ) : '';
		if ( ! $descricao ) {
			$descricao = get_the_excerpt( $obra_id );
		}

		$capa = mfm_seo_imagem_obra( $obra_id );

		return array(
			'titulo'    => get_the_title( $obra_id ) . ' — ' . get_bloginfo( 'name' ),
			'descricao' => $descricao ? $descricao : $padrao['descricao'],
			'imagem'    => $capa ? $capa : $padrao['imagem'],
			'url'       => get_permalink( $obra_id ),
		);
	}

	return $padrao;
}

/**
 * URL canônica da requisição — listagens, taxonomias e páginas apontam pra
 * própria rota; o resto cai na home.
 */
function mfm_seo_url_atual() {
	if ( is_singular() ) {
		return (string) get_permalink();
	}
	if ( is_post_type_archive( 'obra' ) ) {
		return (string) get_post_type_archive_link( 'obra' );
	}
	if ( is_tax() ) {
		$link = get_term_link( get_queried_object() );
		if ( ! is_wp_error( $link ) ) {
			return $link;
		}
	}
	return home_url( '/' );
}

/**
 * Imagem do Open Graph da obra: a foto de capa — com o carimbo "ENTREGUE!"
 * sobreposto quando a obra está entregue (composta uma vez via GD e cacheada
 * em uploads/mfm-og; o nome carrega o id da capa, então trocar a foto gera
 * um arquivo novo). Sem GD ou sem capa, degrada pra foto pura / ''.
 */
function mfm_seo_imagem_obra( $obra_id ) {
	$capa_id  = (int) get_post_thumbnail_id( $obra_id );
	$capa_url = (string) get_the_post_thumbnail_url( $obra_id, 'large' );
	if ( ! $capa_id || ! $capa_url || 'entregue' !== get_post_meta( $obra_id, 'status', true ) ) {
		return $capa_url;
	}

	$uploads  = wp_upload_dir();
	$relativo = sprintf( 'mfm-og/obra-%d-%d.jpg', $obra_id, $capa_id );
	$caminho  = trailingslashit( $uploads['basedir'] ) . $relativo;

	if ( ! file_exists( $caminho ) && ! mfm_seo_gera_og_carimbada( $capa_id, $caminho ) ) {
		return $capa_url;
	}

	return trailingslashit( $uploads['baseurl'] ) . $relativo;
}

/**
 * Compõe a foto da obra + carimbo (assets/img/carimbo-og.png) no canto
 * inferior direito, ~38% da largura da foto, e salva em $destino.
 */
function mfm_seo_gera_og_carimbada( $capa_id, $destino ) {
	if ( ! function_exists( 'imagecreatefromstring' ) ) {
		return false;
	}

	$tamanho = image_get_intermediate_size( $capa_id, 'large' );
	$arquivo = $tamanho && ! empty( $tamanho['path'] )
		? trailingslashit( wp_upload_dir()['basedir'] ) . $tamanho['path']
		: (string) get_attached_file( $capa_id );
	if ( ! $arquivo || ! file_exists( $arquivo ) ) {
		return false;
	}

	$foto    = imagecreatefromstring( (string) file_get_contents( $arquivo ) );
	$carimbo = imagecreatefrompng( MFM_DIR . '/assets/img/carimbo-og.png' );
	if ( ! $foto || ! $carimbo ) {
		return false;
	}

	$larg_foto    = imagesx( $foto );
	$alt_foto     = imagesy( $foto );
	$larg_carimbo = (int) round( $larg_foto * 0.38 );
	$alt_carimbo  = (int) round( $larg_carimbo * imagesy( $carimbo ) / imagesx( $carimbo ) );
	$margem       = (int) round( $larg_foto * 0.04 );

	imagealphablending( $foto, true );
	imagecopyresampled(
		$foto,
		$carimbo,
		$larg_foto - $larg_carimbo - $margem,
		$alt_foto - $alt_carimbo - $margem,
		0,
		0,
		$larg_carimbo,
		$alt_carimbo,
		imagesx( $carimbo ),
		imagesy( $carimbo )
	);

	wp_mkdir_p( dirname( $destino ) );
	$ok = imagejpeg( $foto, $destino, 82 );
	imagedestroy( $foto );
	imagedestroy( $carimbo );

	return (bool) $ok;
}

/**
 * Meta description + canonical + Open Graph + Twitter Card no <head>.
 */
function mfm_seo_head() {
	$d = mfm_seo_dados();

	echo "\n<!-- SEO Maringá Faz Mais -->\n";
	printf( '<meta name="description" content="%s">' . "\n", esc_attr( $d['descricao'] ) );
	printf( '<link rel="canonical" href="%s">' . "\n", esc_url( $d['url'] ) );

	printf( '<meta property="og:locale" content="pt_BR">' . "\n" );
	printf( '<meta property="og:type" content="%s">' . "\n", is_singular( 'obra' ) ? 'article' : 'website' );
	printf( '<meta property="og:site_name" content="%s">' . "\n", esc_attr( get_bloginfo( 'name' ) ) );
	printf( '<meta property="og:title" content="%s">' . "\n", esc_attr( $d['titulo'] ) );
	printf( '<meta property="og:description" content="%s">' . "\n", esc_attr( $d['descricao'] ) );
	printf( '<meta property="og:url" content="%s">' . "\n", esc_url( $d['url'] ) );
	printf( '<meta property="og:image" content="%s">' . "\n", esc_url( $d['imagem'] ) );
	printf( '<meta property="og:image:width" content="1200">' . "\n" );
	printf( '<meta property="og:image:height" content="630">' . "\n" );

	printf( '<meta name="twitter:card" content="summary_large_image">' . "\n" );
	printf( '<meta name="twitter:title" content="%s">' . "\n", esc_attr( $d['titulo'] ) );
	printf( '<meta name="twitter:description" content="%s">' . "\n", esc_attr( $d['descricao'] ) );
	printf( '<meta name="twitter:image" content="%s">' . "\n", esc_url( $d['imagem'] ) );
}
add_action( 'wp_head', 'mfm_seo_head', 5 );

/**
 * A página de pré-visualização da landing de lançamento (/lancamento) é uso
 * interno: não deve aparecer no Google antes do dia do lançamento.
 */
function mfm_robots_preview( $robots ) {
	if ( is_page_template( 'page-templates/landing-lancamento.php' ) ) {
		$robots['noindex']  = true;
		$robots['nofollow'] = true;
	}
	return $robots;
}
add_filter( 'wp_robots', 'mfm_robots_preview' );
 /** Favicon do tema — usado enquanto nenhum "Ícone do site" for definido no
 * Personalizar (se a SECOM subir um por lá, o do WordPress tem prioridade).
 */
function mfm_favicon() {
	if ( has_site_icon() ) {
		return;
	}
	$ver_192 = (string) filemtime( MFM_DIR . '/assets/img/favicon-192.png' );
	$ver_512 = (string) filemtime( MFM_DIR . '/assets/img/favicon-512.png' );
	printf( '<link rel="icon" type="image/png" sizes="192x192" href="%s">' . "\n", esc_url( MFM_URI . '/assets/img/favicon-192.png?v=' . $ver_192 ) );
	printf( '<link rel="apple-touch-icon" href="%s">' . "\n", esc_url( MFM_URI . '/assets/img/favicon-192.png?v=' . $ver_192 ) );
	printf( '<link rel="icon" type="image/png" sizes="512x512" href="%s">' . "\n", esc_url( MFM_URI . '/assets/img/favicon-512.png?v=' . $ver_512 ) );
}
add_action( 'wp_head', 'mfm_favicon', 5 );

/**
 * Título do documento: "Maringá Faz Mais — O Maior Programa de Obras e Serviços da Nossa História".
 */
function mfm_document_title_parts( $partes ) {
	if ( is_front_page() ) {
		$partes['title']   = get_bloginfo( 'name' );
		$partes['tagline'] = 'O Maior Programa de Obras e Serviços da Nossa História';
	}
	return $partes;
}
add_filter( 'document_title_parts', 'mfm_document_title_parts' );

/**
 * Separador do título: "Maringá Faz Mais | O Maior Programa…".
 */
add_filter(
	'document_title_separator',
	function () {
		return '|';
	}
);
