$('#qrg_unit').on('click', function () {
	if ($(this).html() == 'Hz') {
		$(this).html('kHz');
		$("#freq_calculated").val($("#frequency").val() / 1000);
		localStorage.setItem('qrgunit_' + $('#band').val(), 'kHz');
	} else if ($(this).html() == 'kHz') {
		$(this).html('MHz');
		$("#freq_calculated").val($("#frequency").val() / 1000000);
		localStorage.setItem('qrgunit_' + $('#band').val(), 'MHz');
	} else if ($(this).html() == 'MHz') {
		$(this).html('GHz');
		$("#freq_calculated").val($("#frequency").val() / 1000000000);
		localStorage.setItem('qrgunit_' + $('#band').val(), 'GHz');
	} else if ($(this).html() == 'GHz') {
		$(this).html('Hz');
		$("#freq_calculated").val($("#frequency").val());
		localStorage.setItem('qrgunit_' + $('#band').val(), 'Hz');
	}
});

function qrg_inputtype() {
	// on small screens we change the input type of the frequency and frequency_rx fields to number to show the numeric keyboard
	if (window.innerWidth < 768) {
		$('#freq_calculated').attr('type', 'number').attr('step', '0.001').attr('inputmode', 'decimal').attr('lang', 'en');
		$('#frequency_rx').attr('type', 'number').attr('step', '0.001').attr('inputmode', 'decimal').attr('lang', 'en');
	}
}

async function set_qrg() {

	let frequency = $('#frequency').val();
	let band = $('#band').val();

	// check if there are qrgunits in the localStorage
	if (!localStorage.getItem('qrgunit_' + band)) {
		// console.log('fetching qrg units');
		await $.getJSON(base_url + 'index.php/user_options/get_qrg_units', async function (result) {
			$.each(result, function(key, value) {
				localStorage.setItem('qrgunit_' + key, value);
			});
		});
	}

	let qrgunit = localStorage.getItem('qrgunit_' + band);

	if (qrgunit != null) {
		$('#qrg_unit').html(localStorage.getItem('qrgunit_' + band));
	} else {
		$('#qrg_unit').html('kHz'); // default to kHz
	}

	if (qrgunit == 'Hz') {
		$("#freq_calculated").val(frequency);
	} else if (qrgunit == 'kHz') {
		$("#freq_calculated").val(frequency / 1000);
	} else if (qrgunit == 'MHz') {
		$("#freq_calculated").val(frequency / 1000000);
	} else if (qrgunit == 'GHz') {
		$("#freq_calculated").val(frequency / 1000000000);
	}
}

async function set_new_qrg() {
	let new_qrg = $('#freq_calculated').val();

	// Set flag to indicate this is a manual form update (not from CAT/radio)
	// This prevents the radio from being tuned when user manually enters frequency
	window.user_updating_frequency = true;

	// Trim and validate input
	if (new_qrg !== null && new_qrg !== undefined) {
		new_qrg = new_qrg.trim();
	}

	let parsed_qrg = parseFloat(new_qrg);

	// If field is empty or parsing failed, fetch default frequency for current band/mode
	if (!new_qrg || new_qrg === '' || isNaN(parsed_qrg) || !isFinite(parsed_qrg) || parsed_qrg <= 0) {
		// Check if band is selected before attempting to fetch frequency
		if (!$('#band').val()) {
			$('#band').val('160m'); // no band so set default
		}
		if (typeof base_url !== 'undefined') {
			try {
				const result = await $.get(base_url + 'index.php/qso/band_to_freq/' + $('#band').val() + '/' + $('.mode').val());
				$('#frequency').val(result);
				await set_qrg();
				window.user_updating_frequency = false; // Clear flag
				return;
			} catch (error) {
				console.error('Failed to fetch default frequency:', error);
				window.user_updating_frequency = false; // Clear flag
				return;
			}
		}
		window.user_updating_frequency = false; // Clear flag
		return;
	}

	let unit = $('#qrg_unit').html();

	// check if the input contains a unit and parse the qrg
	if (/^\d+(\.\d+)?\s*(hz|h)$/i.test(new_qrg)) {
		unit = 'Hz';
		parsed_qrg = parseFloat(new_qrg);
	} else if (/^\d+(\.\d+)?\s*(khz|k)$/i.test(new_qrg)) {
		unit = 'kHz';
		parsed_qrg = parseFloat(new_qrg);
	} else if (/^\d+(\.\d+)?\s*(mhz|m)$/i.test(new_qrg)) {
		unit = 'MHz';
		parsed_qrg = parseFloat(new_qrg);
	} else if (/^\d+(\.\d+)?\s*(ghz|g)$/i.test(new_qrg)) {
		unit = 'GHz';
		parsed_qrg = parseFloat(new_qrg);
	}

	// update the unit if there was any change
	$('#qrg_unit').html(unit);

	// calculate the other stuff
	let qrg_hz;
	let new_band;
	switch (unit) {
		case 'Hz':
			qrg_hz = parsed_qrg;
			new_band = frequencyToBand(qrg_hz);
			localStorage.setItem('qrgunit_' + new_band, 'Hz');
			break;
		case 'kHz':
			qrg_hz = parsed_qrg * 1000;
			new_band = frequencyToBand(qrg_hz);
			localStorage.setItem('qrgunit_' + new_band, 'kHz');
			break;
		case 'MHz':
			qrg_hz = parsed_qrg * 1000000;
			new_band = frequencyToBand(qrg_hz);
			localStorage.setItem('qrgunit_' + new_band, 'MHz');
			break;
		case 'GHz':
			qrg_hz = parsed_qrg * 1000000000;
			new_band = frequencyToBand(qrg_hz);
			localStorage.setItem('qrgunit_' + new_band, 'GHz');
			break;
		default:
			qrg_hz = 0;
			console.error('Invalid unit');
	}

	$('#frequency').val(qrg_hz);
	$('#freq_calculated').val(parsed_qrg);
	$('#band').val(new_band);

	// Clear the manual update flag
	window.user_updating_frequency = false;

	// DO NOT tune the radio - let the radio control the frequency
	// The form follows the radio, not the other way around
}

$('#frequency').on('change', function () {
	// console.log('frequency changed');
	set_qrg();
});

$('#freq_calculated').on('input', function () {
	if (window.innerWidth > 768) {
		$(this).val($(this).val().replace(',', '.'));
	}
});

