# utils.py

# 유니코드 한글 시작과 끝
# 유니코드에서 한글 음절은 U+AC00에서 U+D7A3까지 할당되어 있습니다.
HANGUL_BEGIN_UNICODE = 0xAC00  # '가'의 유니코드 값
HANGUL_END_UNICODE = 0xD7A3	# '힣'의 유니코드 값

# 초성 리스트
# 한글의 초성 19개를 정의합니다.
CHOSUNG_LIST = [
	'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'
]

# 초성 인덱스 계산 상수
# 초성, 중성, 종성의 조합으로 한글 음절을 만들 때, 초성의 위치를 계산하는 데 사용합니다.
CHOSUNG_BASE = 588  # 초성당 588개의 음절이 있습니다. (21 * 28)

# 중성 리스트
# 한글의 중성 21개를 정의합니다.
JUNGSUNG_LIST = [
	'ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ', 'ㅔ', 'ㅕ', 'ㅖ', 'ㅗ', 'ㅘ', 'ㅙ', 'ㅚ', 'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ', 'ㅠ', 'ㅡ', 'ㅢ', 'ㅣ'
]

# 복합 중성 분해 정보
JUNGSUNG_DECOMPOSE = {
	'ㅘ': ('ㅗ', 'ㅏ'),
	'ㅙ': ('ㅗ', 'ㅐ'),
	'ㅚ': ('ㅗ', 'ㅣ'),
	'ㅝ': ('ㅜ', 'ㅓ'),
	'ㅞ': ('ㅜ', 'ㅔ'),
	'ㅟ': ('ㅜ', 'ㅣ'),
	'ㅢ': ('ㅡ', 'ㅣ')
}

# 종성 리스트
# 한글의 종성 28개를 정의합니다.
JONGSUNG_LIST = [
	'', 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', 'ㄷ', 'ㄹ', 'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', 'ㄿ', 'ㅀ', 'ㅁ', 'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'
]

# 복합 종성 분해 정보
JONGSUNG_DECOMPOSE = {
	'ㄳ': ('ㄱ', 'ㅅ'),
	'ㄵ': ('ㄴ', 'ㅈ'),
	'ㄶ': ('ㄴ', 'ㅎ'),
	'ㄺ': ('ㄹ', 'ㄱ'),
	'ㄻ': ('ㄹ', 'ㅁ'),
	'ㄼ': ('ㄹ', 'ㅂ'),
	'ㄽ': ('ㄹ', 'ㅅ'),
	'ㄾ': ('ㄹ', 'ㅌ'),
	'ㄿ': ('ㄹ', 'ㅍ'),
	'ㅀ': ('ㄹ', 'ㅎ'),
	'ㅄ': ('ㅂ', 'ㅅ')
}

# 중성 인덱스 계산 상수
# 중성의 위치를 계산하는 데 사용합니다.
JUNGSUNG_BASE = 28  # 중성당 28개의 음절이 있습니다.

# 받침 유무를 확인하기 위한 상수
# 한글 음절의 받침 개수는 28개입니다.
JONGSUNG_COUNT = 28

# 숫자 읽기 관련 코드
UNITS = [
	"", "십", "백", "천", "만", "십만", "백만", "천만", "억", "십억", "백억", "천억",
	"조", "십조", "백조", "천조", "경", "십경", "백경", "천경", "해", "십해", "백해", "천해",
	"자", "십자", "백자", "천자", "양", "십양", "백양", "천양", "구", "십구", "백구", "천구",
	"간", "십간", "백간", "천간", "정", "십정", "백정", "천정", "재", "십재", "백재", "천재",
	"극", "십극", "백극", "천극", "항하사", "십항하사", "백항하사", "천항하사", "아승기", "십아승기", "백아승기", "천아승기",
	"나유타", "십나유타", "백나유타", "천나유타", "불가사의", "십불가사의", "백불가사의", "천불가사의", "무량대수", "십무량대수", "백무량대수", "천무량대수",
	"겁", "십겁", "백겁", "천겁", "훈공", "십훈공", "백훈공", "천훈공"
]

NUMBERS = ["", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구"]

def is_hangul_char(c):
	"""
	주어진 문자가 한글 음절인지 확인합니다.
	
	:param c: 확인할 문자
	:return: 한글 음절이면 True, 아니면 False
	"""
	return HANGUL_BEGIN_UNICODE <= ord(c) <= HANGUL_END_UNICODE
