<?php
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}
$avi_lang = 'fr';
if ( function_exists( 'avi_get_current_lang' ) ) { $avi_lang = avi_get_current_lang(); }
if ( $avi_lang === 'en' && isset( $_SERVER['REQUEST_URI'] ) ) {
    $req = $_SERVER['REQUEST_URI'];
    if ( strpos( $req, '/fr/' ) === 0 ) { $avi_lang = 'fr'; }
    elseif ( strpos( $req, '/es/' ) === 0 ) { $avi_lang = 'es'; }
}
if ( $avi_lang !== 'en' ) { set_query_var( 'avi_lang', $avi_lang ); }
$is_fr = true;
add_action( 'wp_head', function() {
    echo '<script>var currentLanguage = "fr";</script>';
}, 1 );
$is_es = false;

$avi_meta_title = 'FAQ — Avision';
$avi_meta_desc  = 'Answers to the most common questions about Avision — for local businesses and agencies.';
$avi_schema_json = array(
	'@context' => 'https://schema.org',
	'@type'    => 'FAQPage',
	'name'     => 'FAQ — Avision',
	'url'      => 'https://avision.org/faq/',
);

if ( ! class_exists( 'Avision_Page_Template' ) ) {
	require_once AVISION_PLUGIN_DIR . 'includes/class-avision-page-template.php';
}

if ( ! function_exists( 'avi_faq_parse_corpus_answer' ) ) {
	/**
	 * @param string $content Corpus content field (question + answer).
	 */
	function avi_faq_parse_corpus_answer( string $content ): string {
		$pos = strpos( $content, '? ' );
		if ( false !== $pos ) {
			return trim( (string) substr( $content, $pos + 2 ) );
		}
		return trim( $content );
	}
}

if ( ! function_exists( 'avi_faq_load_corpus_answers' ) ) {
	/**
	 * @param array<int, string> $files Basenames under avision-backend/scripts/.
	 * @return array<int, string>
	 */
	function avi_faq_load_corpus_answers( array $files ): array {
		$answers = array();
		$root    = trailingslashit( ABSPATH ) . 'avision-backend/scripts/';
		foreach ( $files as $file ) {
			$path = $root . $file;
			if ( ! is_readable( $path ) ) {
				continue;
			}
			$raw  = file_get_contents( $path );
			$rows = json_decode( $raw, true );
			if ( ! is_array( $rows ) ) {
				continue;
			}
			foreach ( $rows as $row ) {
				if ( empty( $row['content'] ) ) {
					continue;
				}
				$answers[] = avi_faq_parse_corpus_answer( (string) $row['content'] );
			}
		}
		return $answers;
	}
}

if ( ! function_exists( 'avi_faq_render_accordions' ) ) {
	/**
	 * @param array<int, string> $questions Summary labels.
	 * @param array<int, string> $answers   Answer bodies.
	 */
	function avi_faq_render_accordions( array $questions, array $answers ): void {
		foreach ( $questions as $idx => $question ) {
			$answer = isset( $answers[ $idx ] ) ? $answers[ $idx ] : '';
			?>
			<details class="avi-faq-page__item">
				<summary class="avi-faq-page__summary"><?php echo esc_html( $question ); ?></summary>
				<div class="avi-faq-page__answer">
					<p><?php echo esc_html( $answer ); ?></p>
				</div>
			</details>
			<?php
		}
	}
}

$b2c_questions = array(
	'Comment connecter ma fiche Google Business Profile ?',
	'Pourquoi mon score de visibilité est-il bas ?',
	'Comment fonctionne Guardian Mode ?',
	'Mes photos n\'apparaissent pas sur Google — que faire ?',
	'Comment résilier ou modifier mon offre ?',
	'Qu\'est-ce que Growth Radar ?',
	'J\'ai utilisé mon code AppSumo mais mon tableau de bord est vide',
	'Comment partager mon rapport de tableau de bord ?',
	'Pourquoi ma prochaine étape est verrouillée — comment fonctionnent les timers ?',
	'J\'ai payé mais Guardian ou Growth Radar reste inactif',
	'Comment passer de AVI Access à Guardian ou une offre mensuelle ?',
	'J\'ai connecté la mauvaise fiche Google — comment changer ?',
	'Ma connexion Google affiche une erreur — comment reconnecter ?',
);

$b2b_questions = array(
	'Comment importer les établissements de mes clients ?',
	'Comment activer Guardian sur plusieurs établissements en une fois ?',
	'Comment accéder au tableau de bord d\'un client précis ?',
	'Comment fonctionnent les tarifs wholesale ?',
	'Comment générer un lien de rapport client ?',
	'Comment monter de palier agence ?',
	'Mes jetons Google ont expiré — comment reconnecter ?',
	'Comment fonctionne la facturation par établissement client ?',
	'Quelle différence entre Agency Access et la facturation mensuelle ?',
	'Comment ajouter un établissement après l\'import initial ?',
	'Quelle différence entre Radar Hebdo et Radar Elite ?',
	'L\'activation en masse a tourné mais certains établissements restent inactifs',
	'Comment activer le grey label sur les rapports clients ?',
);

$b2c_answers = array(
  'Après l\'achat d\'AVI Access, connectez votre compte Google via OAuth 2.0 depuis votre tableau de bord. Cliquez sur "Connecter Google" et autorisez Avision à accéder à votre fiche Google Business Profile.',
  'Votre score reflète l\'état d\'optimisation de votre fiche Google Business Profile. Les éléments manquants — photos, horaires, description, catégories — font baisser le score. Suivez les recommandations de votre tableau de bord.',
  'Guardian Mode déploie 9 boucliers actifs qui surveillent et protègent votre fiche 24h/24 : détection des modifications non autorisées, réponses aux avis, publications de posts, gestion des photos et alertes de positionnement.',
  'Google examine toutes les photos soumises avant publication — entre 24h et 7 jours. Vérifiez que vos photos respectent les directives Google : pas de texte superposé, pas de stock photos, contenu réel de votre établissement.',
  'AVI Access est un paiement unique sans abonnement récurrent — rien à résilier. Pour Guardian Mode ou Growth Radar (abonnements mensuels), envoyez un email à contact@avision.org depuis votre adresse d\'inscription.',
  'Growth Radar suit les positions exactes des mots-clés qui amènent des clients via Google Maps et la recherche locale. Vous voyez quels termes vous font monter ou descendre, et AVI vous indique comment progresser.',
  'Après avoir utilisé votre code AppSumo, connectez votre fiche Google Business Profile pour activer le tableau de bord. Si le tableau de bord reste vide, contactez contact@avision.org avec votre code AppSumo.',
  'Le lien de rapport en lecture seule est disponible dans les offres agence. Si vous gérez votre propre fiche, contactez contact@avision.org pour plus d\'informations.',
  'Chaque niveau de votre progression AVI se débloque après un délai d\'attente — en général 24 à 72h. Ce délai garantit que les optimisations sont bien prises en compte par Google avant de passer à l\'étape suivante.',
  'L\'activation est déclenchée automatiquement par le webhook Stripe, en général sous 60 secondes. Si Guardian ou Growth Radar reste inactif après 5 minutes, contactez contact@avision.org avec votre reçu de paiement.',
  'Depuis votre tableau de bord premium, descendez à la section Guardian Mode ou Growth Radar et cliquez sur le bouton d\'activation. Vous serez redirigé vers le paiement Stripe sécurisé.',
  'Si vous avez sélectionné le mauvais établissement à l\'onboarding, contactez contact@avision.org — nous réinitialisons la connexion OAuth manuellement sous 24h.',
  'Dans la plupart des cas, Avision rafraîchit votre connexion Google automatiquement en arrière-plan. Si une erreur persiste, déconnectez puis reconnectez votre compte Google depuis votre tableau de bord.',
);

$b2b_answers = array(
  'Depuis votre Agency Fleet Dashboard, cliquez sur "Connect Google" et autorisez le compte agence via OAuth. Vos fiches clients sont importées automatiquement. Import CSV disponible dans Account Settings.',
  'Depuis votre Agency Fleet Dashboard, sélectionnez les établissements avec les cases à cocher, puis cliquez sur "Activate Guardian" — un seul paiement Stripe pour tous les établissements sélectionnés.',
  'Depuis votre Agency Fleet Dashboard, trouvez l\'établissement dans la liste et cliquez sur "Manage" pour accéder au tableau de bord premium en lecture seule de ce client.',
  'Les tarifs wholesale sont visibles dans votre Agency Fleet Dashboard après onboarding. Paliers : T1 (1–10 fiches), T2 (11–50 fiches), T3 (51+ fiches) — plus vous gérez de fiches, moins vous payez par fiche.',
  'Depuis votre Agency Fleet Dashboard, ouvrez l\'icône paramètres (⚙️) sur la carte client, activez les éléments à afficher et copiez le lien de rapport en lecture seule à partager avec votre client.',
  'Votre palier actuel s\'affiche dans l\'Agency Fleet Dashboard sous Account Settings. Pour monter de palier, contactez contact@avision.org — la migration prend moins de 24h.',
  'Avision rafraîchit les jetons OAuth Google automatiquement avant chaque scan. Si les jetons expirent manuellement, reconnectez le compte agence depuis Fleet Dashboard → Connect Google.',
  'Chaque établissement client est facturé indépendamment. Guardian Mode et Growth Radar sont des abonnements mensuels par fiche, activés via un seul paiement Stripe groupé.',
  'Agency Access est un paiement unique à vie donnant accès permanent au Fleet Command Center. Guardian Mode et Growth Radar sont des abonnements mensuels optionnels par fiche client.',
  'Depuis votre Agency Fleet Dashboard, cliquez sur "Import" et reconnectez votre compte Google pour synchroniser les nouvelles fiches. Les fiches existantes ne sont pas affectées.',
  'Radar Hebdo suit jusqu\'à 75 mots-clés par établissement, actualisés chaque lundi. Radar Elite suit 100+ mots-clés actualisés chaque jour — idéal pour les marchés très concurrentiels.',
  'L\'activation en masse traite les établissements sélectionnés via un seul paiement Stripe. Si certains établissements restent inactifs après 5 minutes, contactez contact@avision.org avec votre reçu.',
  'Le grey label est inclus dans tous les paliers Agency Access. Configurez-le dans Agency Fleet Dashboard → My Account → Branding — uploadez votre logo et définissez votre URL agence.',
);


$hero = array();

Avision_Page_Template::render(
	'faq',
	$hero,
	static function () use ( $avi_schema_json, $b2c_questions, $b2c_answers, $b2b_questions, $b2b_answers ) {
		$contact_url = home_url( '/contact/' );
		?>
		<div class="avi-faq-page">
			<style>
				.avi-faq-page { background: #0A1628; color: #ffffff; font-family: inherit; line-height: 1.65; }
				.avi-faq-page * { box-sizing: border-box; }
				.avi-faq-page__inner { max-width: 900px; margin: 0 auto; padding: 0 24px; }
				.avi-faq-page__hero { background: #0A1628; padding: 80px 0 40px; text-align: center; }
				.avi-faq-page__hero h1 { margin: 0 0 16px; font-size: 2.5rem; line-height: 1.15; font-weight: 800; color: #ffffff; }
				.avi-faq-page__hero p { margin: 0; max-width: 560px; margin-left: auto; margin-right: auto; font-size: 1.1rem; color: #94a3b8; }
				.avi-faq-page__tabs-section { background: #0A1628; padding: 0 0 64px; }
				.avi-faq-page__tab-input { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
				.avi-faq-page__tabs { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 28px; }
				.avi-faq-page__tabs label { display: inline-block; padding: 12px 20px; border-radius: 8px; background: #0f1e35; color: #ffffff; font-weight: 600; font-size: 0.98rem; cursor: pointer; transition: background 0.2s ease; }
				#tab-b2c:checked ~ .avi-faq-page__tabs label[for="tab-b2c"],
				#tab-b2b:checked ~ .avi-faq-page__tabs label[for="tab-b2b"] { background: #6C3FC5; }
				.avi-faq-page__panels { display: block; }
				#tab-b2c:checked ~ .avi-faq-page__panels #panel-b2b,
				#tab-b2b:checked ~ .avi-faq-page__panels #panel-b2c { display: none; }
				.avi-faq-page__list { display: flex; flex-direction: column; gap: 8px; }
				.avi-faq-page__item { background: #0f1e35; border-left: 3px solid #6C3FC5; border-radius: 8px; overflow: hidden; }
				.avi-faq-page__summary { list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 20px 24px; color: #ffffff; font-weight: 600; cursor: pointer; }
				.avi-faq-page__summary::-webkit-details-marker { display: none; }
				.avi-faq-page__summary::after {
					content: "";
					flex-shrink: 0;
					width: 12px;
					height: 12px;
					background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M4 2L8 6L4 10' stroke='%236C3FC5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
					background-repeat: no-repeat;
					background-position: center;
					background-size: contain;
					transition: transform 0.2s ease;
				}
				.avi-faq-page__item[open] .avi-faq-page__summary { color: #F59E0B; }
				.avi-faq-page__item[open] .avi-faq-page__summary::after { transform: rotate(90deg); }
				.avi-faq-page__answer { color: #cbd5e1; padding: 0 24px 20px; line-height: 1.7; }
				.avi-faq-page__answer p { margin: 0; }
				.avi-faq-page__cta-wrap { background: #0A1628; padding: 0 0 80px; }
				.avi-faq-page__cta {
					max-width: 600px;
					margin: 0 auto;
					background: #0f1e35;
					border-radius: 16px;
					padding: 48px 32px;
					text-align: center;
				}
				.avi-faq-page__cta h2 { margin: 0 0 16px; font-size: 1.65rem; font-weight: 800; color: #ffffff; }
				.avi-faq-page__cta > p { margin: 0 0 24px; color: #94a3b8; font-size: 1rem; line-height: 1.65; }
				.avi-faq-page__cta-link {
					display: inline-block;
					background: #6C3FC5;
					color: #ffffff;
					text-decoration: none;
					border-radius: 8px;
					padding: 14px 28px;
					font-weight: 700;
					font-size: 1rem;
				}
				.avi-faq-page__cta-link:hover { color: #ffffff; opacity: 0.92; }
				.avi-faq-page__cta-note { margin: 16px 0 0; font-size: 13px; color: #94a3b8; }
				@media (max-width: 1024px) {
					.avi-faq-page__hero h1 { font-size: 2.15rem; }
				}
				@media (max-width: 768px) {
					.avi-faq-page__hero { padding: 56px 0 32px; }
					.avi-faq-page__hero h1 { font-size: 1.85rem; }
					.avi-faq-page__tabs { flex-direction: column; }
					.avi-faq-page__tabs label { text-align: center; }
					.avi-faq-page__tabs-section { padding-bottom: 48px; }
					.avi-faq-page__cta { padding: 36px 24px; }
				}
				@media (max-width: 480px) {
					.avi-faq-page__inner { padding: 0 16px; }
					.avi-faq-page__hero h1 { font-size: 1.55rem; }
					.avi-faq-page__summary { padding: 16px 18px; font-size: 0.95rem; }
					.avi-faq-page__answer { padding: 0 18px 16px; font-size: 0.95rem; }
				}
			</style>

			<section class="avi-faq-page__hero" aria-labelledby="avi-faq-hero-title">
				<div class="avi-faq-page__inner">
					<h1 id="avi-faq-hero-title"><!-- AVI_FR_TEST -->Questions fréquemment posées</h1>
					<p>Tout ce que vous devez savoir — avant et après votre démarrage.</p>
				</div>
			</section>

			<section class="avi-faq-page__tabs-section" aria-label="FAQ categories">
				<div class="avi-faq-page__inner avi-faq-page__tabs-root">
					<input class="avi-faq-page__tab-input" type="radio" name="faq-tab" id="tab-b2c" checked="checked" />
					<input class="avi-faq-page__tab-input" type="radio" name="faq-tab" id="tab-b2b" />
					<div class="avi-faq-page__tabs">
						<label for="tab-b2c">🏪 Pour les commerces locaux</label>
						<label for="tab-b2b">🏢 Pour les agences</label>
					</div>
					<div class="avi-faq-page__panels">
						<div class="avi-faq-page__panel" id="panel-b2c">
							<div class="avi-faq-page__list" role="list">
								<?php avi_faq_render_accordions( $b2c_questions, $b2c_answers ); ?>
							</div>
						</div>
						<div class="avi-faq-page__panel" id="panel-b2b">
							<div class="avi-faq-page__list" role="list">
								<?php avi_faq_render_accordions( $b2b_questions, $b2b_answers ); ?>
							</div>
						</div>
					</div>
				</div>
			</section>

			<section class="avi-faq-page__cta-wrap" aria-labelledby="avi-faq-cta-title">
				<div class="avi-faq-page__inner">
					<div class="avi-faq-page__cta">
						<h2 id="avi-faq-cta-title">Vous avez encore une question ?</h2>
						<p>AVI répond instantanément à la plupart des questions produit depuis votre tableau de bord. Pour tout le reste — facturation, problèmes de compte, questions techniques — contactez directement le fondateur.</p>
						<a class="avi-faq-page__cta-link" href="<?php echo esc_url( $contact_url ); ?>">Contacter le support →</a>
						<p class="avi-faq-page__cta-note">Réponse sous 72h ouvrées · Géré directement par le fondateur</p>
					</div>
				</div>
			</section>
		</div>
		<script type="application/ld+json"><?php echo wp_json_encode( $avi_schema_json, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ); ?></script>
		<?php
	}
);
