<?php
/**
 * Campos da obra (ACF / Secure Custom Fields), registrados em PHP pra
 * versionar no repositório — a interface de edição de campos do plugin
 * fica escondida de propósito: mudança de campo passa por código.
 *
 * Formulário em página única seguindo o mockup do painel da campanha:
 * linhas de campos combinados, eixo/região/bairro dentro do form e aviso
 * destacado da regra de "Entregue". O visual fica em
 * assets/css/admin-obra.css.
 *
 * Escopo jul/2026: 5 status, eixo/área e região fixos, investimento,
 * etapa do andamento (4 passos), descrição completa e obra em destaque.
 * A antiga "linha do tempo" virou o CPT Atualização (inc/atualizacoes.php).
 *
 * Requer o plugin gratuito "Secure Custom Fields" (fork do ACF no
 * diretório oficial, com repeater e galeria inclusos).
 */

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

// Aviso se o plugin de campos não estiver ativo — sem ele o cadastro fica só com título e foto.
function mfm_aviso_sem_acf() {
	if ( function_exists( 'acf_add_local_field_group' ) || ! current_user_can( 'activate_plugins' ) ) {
		return;
	}
	echo '<div class="notice notice-error"><p><strong>Maringá Faz Mais:</strong> o plugin <em>Secure Custom Fields</em> precisa estar ativo pra exibir os campos do cadastro de obras.</p></div>';
}
add_action( 'admin_notices', 'mfm_aviso_sem_acf' );

// Campos são definidos em código; esconde o menu de edição de campos do plugin.
add_filter( 'acf/settings/show_admin', '__return_false' );

// Eixo, região e bairro são escolhidos dentro do formulário (campos ACF de
// taxonomia); as caixas laterais padrão sairiam duplicadas.
function mfm_remove_metaboxes_taxonomia() {
	remove_meta_box( 'eixodiv', 'obra', 'side' );
	remove_meta_box( 'regiaodiv', 'obra', 'side' );
	remove_meta_box( 'bairrodiv', 'obra', 'side' );
}
add_action( 'add_meta_boxes_obra', 'mfm_remove_metaboxes_taxonomia' );

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

	acf_add_local_field_group(
		array(
			'key'      => 'group_mfm_obra',
			'title'    => 'Obra / serviço',
			'location' => array(
				array(
					array(
						'param'    => 'post_type',
						'operator' => '==',
						'value'    => 'obra',
					),
				),
			),
			'position' => 'acf_after_title',
			'fields'   => array(

				// ----- Linha: tipo | visível | destaque -----------------
				array(
					'key'           => 'field_mfm_tipo',
					'name'          => 'tipo',
					'label'         => 'Tipo',
					'type'          => 'button_group',
					'instructions'  => 'Define em qual selo a entrega conta.',
					'choices'       => array(
						'obra'    => 'Obra',
						'servico' => 'Serviço',
					),
					'default_value' => 'obra',
					'required'      => 1,
					'wrapper'       => array( 'width' => '34' ),
				),
				array(
					'key'           => 'field_mfm_visivel',
					'name'          => 'visivel',
					'label'         => 'Visível no site',
					'type'          => 'true_false',
					'instructions'  => 'Desligue pra tirar do site sem excluir — o histórico fica guardado.',
					'ui'            => 1,
					'ui_on_text'    => 'Visível',
					'ui_off_text'   => 'Oculta',
					'default_value' => 1,
					'wrapper'       => array( 'width' => '33' ),
				),
				array(
					'key'           => 'field_mfm_destaque',
					'name'          => 'destaque',
					'label'         => 'Obra em destaque',
					'type'          => 'true_false',
					'instructions'  => 'Ligada, aparece nos cards de destaque da home.',
					'ui'            => 1,
					'ui_on_text'    => 'Sim',
					'ui_off_text'   => 'Não',
					'default_value' => 0,
					'wrapper'       => array( 'width' => '33' ),
				),

				array(
					'key'          => 'field_mfm_descritivo',
					'name'         => 'descritivo_breve',
					'label'        => 'Descritivo breve',
					'type'         => 'textarea',
					'instructions' => 'Apresentação da obra exibida no card público. Objetiva e clara para o cidadão. Máx. 160 caracteres.',
					'required'     => 1,
					'maxlength'    => 160,
					'rows'         => 2,
					'new_lines'    => '',
					'wrapper'      => array( 'class' => 'mfm-campo-descritivo' ),
				),
				array(
					'key'          => 'field_mfm_descricao',
					'name'         => 'descricao_completa',
					'label'        => 'Descrição completa',
					'type'         => 'textarea',
					'instructions' => 'Texto da página da obra: resumo do que está sendo feito e o benefício para a população. Pode ter vários parágrafos.',
					'rows'         => 6,
					'new_lines'    => 'wpautop',
				),

				// ----- Linha: eixo | região | bairro --------------------
				array(
					'key'           => 'field_mfm_eixo',
					'name'          => 'eixo',
					'label'         => 'Eixo/Área',
					'type'          => 'taxonomy',
					'instructions'  => 'Área da gestão a que a obra pertence.',
					'taxonomy'      => 'eixo',
					'field_type'    => 'select',
					'allow_null'    => 0,
					'add_term'      => 0,
					'save_terms'    => 1,
					'load_terms'    => 1,
					'return_format' => 'id',
					'required'      => 1,
					'wrapper'       => array( 'width' => '34' ),
				),
				array(
					'key'           => 'field_mfm_regiao',
					'name'          => 'regiao',
					'label'         => 'Região',
					'type'          => 'taxonomy',
					'instructions'  => 'Se ficar vazia, é preenchida pela região do bairro.',
					'taxonomy'      => 'regiao',
					'field_type'    => 'select',
					'allow_null'    => 1,
					'add_term'      => 0,
					'save_terms'    => 1,
					'load_terms'    => 1,
					'return_format' => 'id',
					'wrapper'       => array( 'width' => '33' ),
				),
				array(
					'key'           => 'field_mfm_bairro',
					'name'          => 'bairro',
					'label'         => 'Bairro',
					'type'          => 'taxonomy',
					'instructions'  => 'Cadastre bairro novo dentro da região dele.',
					'taxonomy'      => 'bairro',
					'field_type'    => 'select',
					'allow_null'    => 1,
					'add_term'      => 1,
					'save_terms'    => 1,
					'load_terms'    => 1,
					'return_format' => 'id',
					'wrapper'       => array( 'width' => '33' ),
				),

				array(
					'key'          => 'field_mfm_endereco',
					'name'         => 'endereco',
					'label'        => 'Endereço',
					'type'         => 'text',
					'instructions' => 'Rua e número onde a obra acontece — aparece na ficha da obra. Ex.: Av. Mandacaru, 1234.',
					'maxlength'    => 160,
				),

				// ----- Linha: status | etapa | progresso ----------------
				array(
					'key'           => 'field_mfm_status',
					'name'          => 'status',
					'label'         => 'Status',
					'type'          => 'select',
					'choices'       => mfm_status_rotulos(),
					'default_value' => 'planejada',
					'required'      => 1,
					'return_format' => 'value',
					'wrapper'       => array( 'width' => '34' ),
				),
				array(
					'key'           => 'field_mfm_etapa_andamento',
					'name'          => 'etapa_andamento',
					'label'         => 'Etapa do andamento',
					'type'          => 'select',
					'instructions'  => 'Alimenta a linha de 4 etapas da página da obra.',
					'choices'       => array(
						'planejamento' => '1. Planejamento',
						'licitacao'    => '2. Licitação',
						'execucao'     => '3. Execução',
						'entrega'      => '4. Entrega',
					),
					'default_value' => 'planejamento',
					'required'      => 1,
					'return_format' => 'value',
					'wrapper'       => array( 'width' => '33' ),
				),
				array(
					'key'           => 'field_mfm_progresso',
					'name'          => 'progresso',
					'label'         => '% progresso',
					'type'          => 'number',
					'instructions'  => 'Percentual dentro da etapa Execução; alimenta a barra verde.',
					'min'           => 0,
					'max'           => 100,
					'step'          => 1,
					'default_value' => 0,
					'append'        => '%',
					'wrapper'       => array( 'width' => '33' ),
				),

				// ----- Linha: início | prazo | investimento -------------
				array(
					'key'            => 'field_mfm_data_inicio',
					'name'           => 'data_inicio',
					'label'          => 'Data de início',
					'type'           => 'date_picker',
					'display_format' => 'd/m/Y',
					'return_format'  => 'Ymd',
					'first_day'      => 0,
					'wrapper'        => array( 'width' => '34' ),
				),
				array(
					'key'            => 'field_mfm_prazo',
					'name'           => 'prazo_previsto',
					'label'          => 'Prazo previsto',
					'type'           => 'date_picker',
					'display_format' => 'd/m/Y',
					'return_format'  => 'Ymd',
					'first_day'      => 0,
					'wrapper'        => array( 'width' => '33' ),
				),
				array(
					'key'          => 'field_mfm_investimento',
					'name'         => 'investimento',
					'label'        => 'Investimento',
					'type'         => 'number',
					'instructions' => 'Valor total em reais — só números. Ex.: 1250000.50',
					'min'          => 0,
					'step'         => '0.01',
					'prepend'      => 'R$',
					'wrapper'      => array( 'width' => '33' ),
				),

				array(
					'key'          => 'field_mfm_etapa',
					'name'         => 'etapa_atual',
					'label'        => 'Etapa atual (texto livre)',
					'type'         => 'text',
					'instructions' => 'Complemento curto exibido na página da obra. Ex.: "Pavimentação iniciada em 12/07."',
					'maxlength'    => 200,
				),

				// ----- Localização --------------------------------------
				array(
					'key'          => 'field_mfm_mapa',
					'label'        => 'Coordenadas GPS',
					'type'         => 'message',
					'instructions' => 'Para o pin automático no mapa: clique no ponto da obra (ou arraste o marcador) e as coordenadas são preenchidas sozinhas.',
					'message'      => '<div id="mfm-mapa-obra"></div>',
					'esc_html'     => 0,
				),
				array(
					'key'     => 'field_mfm_latitude',
					'name'    => 'latitude',
					'label'   => 'Latitude',
					'type'    => 'text',
					'wrapper' => array(
						'class' => 'mfm-campo-lat',
						'width' => '50',
					),
				),
				array(
					'key'     => 'field_mfm_longitude',
					'name'    => 'longitude',
					'label'   => 'Longitude',
					'type'    => 'text',
					'wrapper' => array(
						'class' => 'mfm-campo-lng',
						'width' => '50',
					),
				),

				// ----- Fotos e vídeos -----------------------------------
				array(
					'key'           => 'field_mfm_galeria',
					'name'          => 'galeria',
					'label'         => 'Fotos',
					'type'          => 'gallery',
					'instructions'  => 'Upload da evolução da obra — aparecem nas miniaturas do card e na galeria da página. Prefira WebP ou JPG.',
					'return_format' => 'id',
					'insert'        => 'append',
					'mime_types'    => 'jpg, jpeg, png, webp',
				),
				array(
					'key'          => 'field_mfm_videos',
					'name'         => 'videos',
					'label'        => 'Vídeos',
					'type'         => 'repeater',
					'instructions' => 'Em cada linha, envie um arquivo MP4 ou cole um link do YouTube (um dos dois).',
					'button_label' => 'Adicionar vídeo',
					'layout'       => 'table',
					'sub_fields'   => array(
						array(
							'key'           => 'field_mfm_video_arquivo',
							'name'          => 'arquivo',
							'label'         => 'Arquivo MP4',
							'type'          => 'file',
							'return_format' => 'url',
							'mime_types'    => 'mp4',
						),
						array(
							'key'   => 'field_mfm_video_url',
							'name'  => 'url',
							'label' => 'ou link do YouTube',
							'type'  => 'url',
						),
					),
				),
				array(
					'key'           => 'field_mfm_video_ia',
					'name'          => 'video_ia',
					'label'         => 'Vídeo IA (opcional)',
					'type'          => 'file',
					'instructions'  => 'Vídeo gerado por IA mostrando a obra concluída — uso pendente de validação com o cliente.',
					'return_format' => 'url',
					'mime_types'    => 'mp4',
					'wrapper'       => array( 'width' => '50' ),
				),
				array(
					'key'     => 'field_mfm_video_ia_url',
					'name'    => 'video_ia_url',
					'label'   => 'ou link do vídeo IA',
					'type'    => 'url',
					'wrapper' => array( 'width' => '50' ),
				),

				// ----- Aviso: atualizações + regra de entrega -----------
				array(
					'key'      => 'field_mfm_aviso_atualizacoes',
					'label'    => '',
					'type'     => 'message',
					'message'  => '<strong>Novidades da obra</strong> (avanços, fotos do andamento, marcos) agora são cadastradas no menu <a href="edit.php?post_type=atualizacao">Atualizações</a> — cada registro vira uma notícia na página da obra.',
					'esc_html' => 0,
					'wrapper'  => array( 'class' => 'mfm-aviso-atualizacoes' ),
				),
				array(
					'key'      => 'field_mfm_aviso_entregue',
					'label'    => '',
					'type'     => 'message',
					'message'  => '<strong>Ao marcar o status como "Entregue":</strong> o carimbo aparece automaticamente no card público, o contador de selos sobe +1, a barra de progresso vai para 100% e a etapa fecha em "Entrega". Voltar o status desfaz a contagem.',
					'esc_html' => 0,
					'wrapper'  => array( 'class' => 'mfm-aviso-entregue' ),
				),
			),
		)
	);
}
add_action( 'acf/init', 'mfm_registra_campos_obra' );
