# hangul_split.py

from hangulpy.utils import CHOSUNG_LIST, CHOSUNG_BASE, is_hangul_char, HANGUL_BEGIN_UNICODE, JUNGSUNG_LIST, JUNGSUNG_DECOMPOSE, JONGSUNG_LIST, JONGSUNG_DECOMPOSE, JUNGSUNG_BASE

def split_hangul_char(c):
	"""
	주어진 한글 음절을 초성, 중성, 종성으로 분해하여 배열 형태로 반환합니다.
	
	:param c: 한글 음절 문자
	:return: 초성, 중성, 종성을 배열 형태로 반환
	"""
	if is_hangul_char(c):
		# 한글 음절의 유니코드 값을 기준으로 각 성분의 인덱스를 계산합니다.
		char_index = ord(c) - HANGUL_BEGIN_UNICODE
		chosung_index = char_index // CHOSUNG_BASE
		jungsung_index = (char_index % CHOSUNG_BASE) // JUNGSUNG_BASE
		jongsung_index = char_index % JUNGSUNG_BASE

		# 중성 및 종성 분해
		jungsung = JUNGSUNG_LIST[jungsung_index]
		jongsung = JONGSUNG_LIST[jongsung_index]

		jungsung_decomposed = JUNGSUNG_DECOMPOSE.get(jungsung, [jungsung])
		jongsung_decomposed = JONGSUNG_DECOMPOSE.get(jongsung, [jongsung])

		return [CHOSUNG_LIST[chosung_index]] + list(jungsung_decomposed) + list(jongsung_decomposed)
	
	# 자모인 경우 추가 처리
	if c in JUNGSUNG_DECOMPOSE:
		return list(JUNGSUNG_DECOMPOSE[c])
	if c in JONGSUNG_DECOMPOSE:
		return list(JONGSUNG_DECOMPOSE[c])

	return [c]  # 한글이 아니면 그대로 반환

def split_hangul_string(s):
	"""
	주어진 문자열의 각 한글 음절을 초성, 중성, 종성으로 분해하여 배열 형태로 반환합니다.
	
	:param s: 문자열
	:return: 각 한글 음절을 초성, 중성, 종성으로 분해한 결과를 포함하는 배열
	"""
	result = []
	for char in s:
		result.extend(split_hangul_char(char))
	return result