jQuery(function ($) {
	var config = window.mbMaxCf7OnboardingConfig || {};
	var $modal = $('#mb-max-cf7-onboarding-modal');

	if (!$modal.length) {
		return;
	}

	var $openBtn = $('#mb-max-cf7-open-onboarding');
	var $closeBtn = $('#mb-max-cf7-close-onboarding');
	var $status = $('#mb-max-cf7-onboarding-status');
	var $botLink = $('#mb-max-cf7-open-bot-link');
	var $bindWrap = $('#mb-max-cf7-bind-command-wrap');
	var $bindCode = $('#mb-max-cf7-bind-command');
	var $bindExpire = $('#mb-max-cf7-bind-expire');
	var $steps = $('#mb-max-cf7-onboarding-steps-list');
	var $recipientType = $('input[name="mb_max_cf7_recipient_type"]');

	function getRecipientType() {
		return $recipientType.filter(':checked').val() === 'group' ? 'group' : 'direct';
	}

	function setStatus(type, message) {
		var safeType = type || 'info';
		$status.removeClass('notice-info notice-success notice-warning notice-error').addClass('notice notice-' + safeType);
		$status.empty().append($('<p/>').text(String(message || '')));
	}

	function setupSteps(recipientType) {
		if (recipientType === 'group') {
			$steps.html(
				'<li>Добавьте бота в приватный чат/группу в MAX.</li>' +
				'<li>Нажмите «Получить bind-команду».</li>' +
				'<li>Отправьте команду в этом чате.</li>' +
				'<li>Этот же чат можно использовать для нескольких сайтов: для каждого сайта выполните свой bind-код.</li>' +
				'<li>Нажмите «Проверить подключение».</li>'
			);
			return;
		}

		$steps.html(
			'<li>Нажмите «Получить bind-команду».</li>' +
			'<li>Откройте бота MAX.</li>' +
			'<li>Отправьте команду в личные сообщения боту.</li>' +
			'<li>Этот же MAX-аккаунт можно привязать к нескольким сайтам отдельными bind-командами.</li>' +
			'<li>Нажмите «Проверить подключение».</li>'
		);
	}

	function request(action, data) {
		return $.post(config.ajaxUrl, $.extend({
			action: action,
			nonce: config.nonce
		}, data || {}));
	}

	function hasSeenOnboarding(seenKey) {
		try {
			return !!window.localStorage.getItem(seenKey);
		} catch (e) {
			return false;
		}
	}

	function markOnboardingSeen(seenKey) {
		try {
			window.localStorage.setItem(seenKey, '1');
		} catch (e) {
			// Ignore storage errors (private mode / blocked storage).
		}
	}

	function renderRecipientState(recipient) {
		if (!recipient || typeof recipient !== 'object') {
			setStatus('warning', 'Не удалось определить состояние привязки.');
			return;
		}

		var desiredType = recipient.desired_type === 'group' ? 'group' : 'direct';
		$recipientType.filter('[value="' + desiredType + '"]').prop('checked', true);
		setupSteps(desiredType);

		var recipientLabel = recipient.label ? recipient.label : (recipient.id ? recipient.id : '—');
		if (recipient.is_bound) {
			var targetText = recipient.effective_type === 'group'
				? 'Привязано к приватному чату: ' + recipientLabel
				: 'Привязано к личным сообщениям: ' + recipientLabel;
			if (recipient.is_fallback) {
				targetText += '. Группа пока не привязана, временно используется личка.';
				setStatus('warning', targetText);
			} else {
				setStatus('success', targetText);
			}
		} else {
			var modeText = desiredType === 'group' ? 'приватный чат' : 'личные сообщения';
			setStatus('info', 'Получатель еще не привязан. Выбран режим: ' + modeText + '.');
		}
	}

	function fetchState(autoOpenIfNeeded) {
		if (!config.hasIntegrationKey) {
			setStatus('warning', 'Сначала укажите и сохраните ключ интеграции.');
			return;
		}

		setStatus('info', 'Проверяем текущее состояние...');
		request('mb_max_cf7_onboarding_state').done(function (resp) {
			if (!resp || !resp.success) {
				var msg = resp && resp.data && resp.data.message ? resp.data.message : 'Не удалось загрузить состояние.';
				setStatus('error', msg);
				return;
			}

			var data = resp.data || {};
			var botUrl = data.bot && data.bot.url ? data.bot.url : '#';
			$botLink.attr('href', botUrl);
			renderRecipientState(data.recipient || {});

			if (autoOpenIfNeeded) {
				var seenKey = 'mbMaxCf7OnboardingSeen:' + (config.siteHost || '') + ':' + (config.integrationHash || '');
				var isBound = !!(data.recipient && data.recipient.is_bound);
				if (!isBound && !hasSeenOnboarding(seenKey)) {
					openModal();
					markOnboardingSeen(seenKey);
				}
			}
		}).fail(function () {
			setStatus('error', 'Ошибка сети при загрузке состояния.');
		});
	}

	function openModal() {
		$modal.show();
		$('body').css('overflow', 'hidden');
	}

	function closeModal() {
		$modal.hide();
		$('body').css('overflow', '');
	}

	$openBtn.on('click', function () {
		openModal();
		fetchState(false);
	});

	$closeBtn.on('click', closeModal);
	$modal.find('.mb-max-cf7-onboarding-backdrop').on('click', closeModal);

	$recipientType.on('change', function () {
		setupSteps(getRecipientType());
	});

	$('#mb-max-cf7-generate-bind').on('click', function () {
		if (!config.hasIntegrationKey) {
			setStatus('warning', 'Сначала укажите и сохраните ключ интеграции.');
			return;
		}

		var selected = getRecipientType();
		setStatus('info', 'Генерируем bind-команду...');
		request('mb_max_cf7_onboarding_bind_code', { recipient_type: selected }).done(function (resp) {
			if (!resp || !resp.success) {
				var msg = resp && resp.data && resp.data.message ? resp.data.message : 'Не удалось получить bind-команду.';
				setStatus('error', msg);
				return;
			}

			var data = resp.data || {};
			var bind = data.bind || {};
			var command = bind.command || '';
			if (!command) {
				setStatus('error', 'Портал не вернул bind-команду.');
				return;
			}

			$bindCode.text(command);
			$bindExpire.text(bind.expires_at ? 'Код действует до: ' + bind.expires_at : '');
			$bindWrap.show();
			renderRecipientState(data.recipient || {});
			setStatus('success', 'Команда готова. Отправьте ее в MAX и затем нажмите «Проверить подключение».');
		}).fail(function () {
			setStatus('error', 'Ошибка сети при генерации bind-команды.');
		});
	});

	$('#mb-max-cf7-copy-bind').on('click', function () {
		var text = $bindCode.text();
		if (!text) {
			return;
		}
		if (navigator.clipboard && navigator.clipboard.writeText) {
			navigator.clipboard.writeText(text);
		}
	});

	$('#mb-max-cf7-verify-bind').on('click', function () {
		if (!config.hasIntegrationKey) {
			setStatus('warning', 'Сначала укажите и сохраните ключ интеграции.');
			return;
		}

		setStatus('info', 'Проверяем подключение в MAX...');
		request('mb_max_cf7_onboarding_verify').done(function (resp) {
			if (!resp || !resp.success) {
				var msg = resp && resp.data && resp.data.message ? resp.data.message : 'Не удалось проверить подключение.';
				setStatus('error', msg);
				return;
			}

			var data = resp.data || {};
			renderRecipientState(data.recipient || {});
		}).fail(function () {
			setStatus('error', 'Ошибка сети при проверке подключения.');
		});
	});

	fetchState(true);
});
