import time
import ntptime # type: ignore

_UTC_OFFSET: int = 1 * 3600  # +1 or +2 hours for CEST, adjust for your timezone

def local_time_with_offset():
	# Set timezone offset (in seconds)
	current_time = time.time() + _UTC_OFFSET
	return time.localtime(current_time)
 
 
def get_datetime_string(format='full'):
	"""
	Return date/time as string with different formats

	Args:
	    format: "full", "date", "time", "short", "ticks"
	"""
	try:
		year, month, day, hour, minute, second, weekday, yearday = local_time_with_offset()

		if format == 'full':
			return f'{year:04d}-{month:02d}-{day:02d} {hour:02d}:{minute:02d}:{second:02d}'
		elif format == 'date':
			return f'{year:04d}-{month:02d}-{day:02d}'
		elif format == 'time':
			return f'{hour:02d}:{minute:02d}:{second:02d}'
		elif format == 'short':
			return f'{month:02d}/{day:02d} {hour:02d}:{minute:02d}'
		else:
			return f'Ticks: {time.ticks_ms()} ms'

	except:
		return f'Ticks: {time.ticks_ms()} ms'


def get_german_datetime():
	"""Return German date and time"""
	try:
		year, month, day, hour, minute, second, weekday, yearday = local_time_with_offset()

		weekdays = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So']
		weekday_name = weekdays[weekday]

		return f'{weekday_name}.{day:02d}.{month:02d}.{year} {hour:02d}:{minute:02d}'

	except:
		ticks = time.ticks_ms() // 1000
		return f'Zeit: {ticks} sek'


def get_german_timestamp_short():
	"""Get German timestamp with short months (for Wokwi)"""
	ticks = time.ticks_ms()
	day = (ticks // 86400000) % 31 + 1
	month = (ticks // 2592000000) % 12 + 1
	hour = (ticks // 3600000) % 24
	minute = (ticks // 60000) % 60

	months = ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez']
	month_name = months[month - 1]

	return f'{day}.{month_name} {hour:02d}:{minute:02d}'


def get_german_time_ticks():
	"""Get German time using ticks (works in Wokwi)"""
	ticks = time.ticks_ms()

	# Simulate time progression
	total_seconds = ticks // 1000
	hours = (total_seconds // 3600) % 24
	minutes = (total_seconds // 60) % 60
	seconds = total_seconds % 60

	return f'{hours:02d}:{minutes:02d}:{seconds:02d}'


def get_german_date_ticks():
	"""Get German date using ticks"""
	ticks = time.ticks_ms()

	# Simulate date progression (starting from Jan 15, 2024)
	days_passed = ticks // (24 * 3600 * 1000)
	day = 15 + (days_passed % 28)  # Simple month simulation
	month = 1 + (days_passed // 28) % 12
	year = 2024 + (days_passed // (28 * 12))

	months = ['JAN', 'FEB', 'MAR', 'APR', 'MAI', 'JUN', 'JUL', 'AUG', 'SEP', 'OKT', 'NOV', 'DEZ']
	month_name = months[month - 1]

	return f'{day:02d}.{month_name}.{str(year)[-2:]}'

def sync_ntp_time():
    try:
        print("Syncing time via NTP...")
        ntptime.settime()  # Default uses pool.ntp.org
        print("Time synchronized successfully!")
        return True
    except Exception as e:
        print("NTP sync failed:", e)
        return False