
from .text_normalizer import UYGHUR_LETTERS, clean_input_text

# def uighur_syllabize(text: str):
#     # Uyghur Vowels
#     vowels = "ئاەئەوۆئۇئۈئىئېاەوۆۇۈىې"
    
#     def split_word(word):
#         syllables = []
#         current_syllable = ""
#         i = 0
        
#         # Helper to check if a character is a vowel
#         is_vowel = lambda char: char in vowels
        
#         while i < len(word):
#             current_syllable += word[i]
            
#             # If we find a vowel, look ahead to decide where to split
#             if is_vowel(word[i]):
#                 # Check next characters
#                 remaining = word[i+1:]
                
#                 # Rule 1: V-V (e.g., 'ائ') -> Split after first vowel
#                 if len(remaining) >= 1 and is_vowel(remaining[0]):
#                     syllables.append(current_syllable)
#                     current_syllable = ""
                
#                 # Rule 2: V-C-V (e.g., 'ba-ra') -> Split after first vowel
#                 elif len(remaining) >= 2 and not is_vowel(remaining[0]) and is_vowel(remaining[1]):
#                     syllables.append(current_syllable)
#                     current_syllable = ""
                
#                 # Rule 3: V-C-C-V (e.g., 'mek-tep') -> Split after first consonant
#                 elif len(remaining) >= 3 and not is_vowel(remaining[0]) and not is_vowel(remaining[1]) and is_vowel(remaining[2]):
#                     current_syllable += remaining[0]
#                     syllables.append(current_syllable)
#                     current_syllable = ""
#                     i += 1 # Skip the consonant we just added
                
#                 # Rule 4: End of word or C-C-C clusters (rare in native words)
#                 # We keep going until we find a clear boundary or end of word
#             i += 1
            
#         if current_syllable:
#             syllables.append(current_syllable)
#         return syllables

#     # Clean text and process word by word
#     words = text.split()
#     all_syllables = []
#     for w in words:
#         all_syllables.extend(split_word(w))
    
#     #merge ئ to next syllable. single ئ no any semantic meaning and no it's dedicated sound.
#     original_ayllables = [*all_syllables]
#     all_syllables.clear()
#     handled = True
#     for s in original_ayllables:
#         if s == "ئ":
#             handled = False
#             continue
#         if not handled:
#             s = "ئ" + s
#             handled = True
#         all_syllables.append(s)
    
#     return all_syllables

# test_words = ['تەكلىپتەۋسىيەلىرىگە', 'تەكلىپ-تەۋسىيەلىرىگە']
# for tw in test_words:
#     print(f"{tw} -> {uighur_syllabize(tw.strip())}")
# تەكلىپتەۋسىيەلىرىگە -> ['تەك', 'لىپ', 'تەۋ', 'سى', 'يە', 'لى', 'رى', 'گە']
# تەكلىپ-تەۋسىيەلىرىگە -> ['تەك', 'لىپ-تەۋ', 'سى', 'يە', 'لى', 'رى', 'گە']


def uighur_syllabize(text: str):
    # Uyghur Vowels (ASU)
    vowels = "ئاەئەوۆئۇئۈئىئېاەوۆۇۈىې"
    
    def is_vowel(char):
        return char in vowels

    def split_word(word):
        syllables = []
        i = 0
        last_split = 0
        
        while i < len(word):
            # Look for vowel patterns to determine boundaries
            if is_vowel(word[i]):
                rem = word[i+1:]
                
                # Rule: V-V -> Split after first vowel
                if len(rem) >= 1 and is_vowel(rem[0]):
                    syllables.append(word[last_split:i+1])
                    last_split = i + 1
                
                # Rule: V-C-V -> Split after vowel (e.g., ba-ra)
                elif len(rem) >= 2 and not is_vowel(rem[0]) and is_vowel(rem[1]):
                    syllables.append(word[last_split:i+1])
                    last_split = i + 1
                
                # Rule: V-C-C-V -> Split between consonants (e.g., mek-tep)
                elif len(rem) >= 3 and not is_vowel(rem[0]) and not is_vowel(rem[1]) and is_vowel(rem[2]):
                    syllables.append(word[last_split:i+2])
                    last_split = i + 2
                    i += 1 # Skip first C
                
                # Rule: V-C-C-C-V (VCCCV) -> Split after second consonant (e.g., gert-mek)
                # This fixes "gertmek", "eytqan", "partlap", "dostlar"
                elif len(rem) >= 4 and not is_vowel(rem[0]) and not is_vowel(rem[1]) and not is_vowel(rem[2]) and is_vowel(rem[3]):
                    syllables.append(word[last_split:i+3])
                    last_split = i + 3
                    i += 2 # Skip first two Cs
            i += 1
            
        # Add the remaining part of the word
        if last_split < len(word):
            syllables.append(word[last_split:])
            
        return syllables

    # Process word by word
    words = text.split()
    final_output = []
    
    for w in words:
        raw_syllables = split_word(w)
        
        # Handle Hemze (ئ) re-merging
        processed = []
        skip_next = False
        for j in range(len(raw_syllables)):
            if skip_next:
                skip_next = False
                continue
            
            s = raw_syllables[j]
            # If the current syllable is JUST "ئ" or ends in "ئ", merge it with next
            if s == "ئ" and j + 1 < len(raw_syllables):
                processed.append("ئ" + raw_syllables[j+1])
                skip_next = True
            else:
                processed.append(s)
        final_output.extend(processed)
        
    return final_output

# Verification
# test_words = ["گەرتمەك", "ئېيتقان", "دوستلار", "مەكتەپكە", '	كومپېيۇتېر تورى زادى قانداق نەرسىدۇ؟	']
# for tw in test_words:
#     print(f"{tw} -> {uighur_syllabize(tw.strip())}")

# test_words = ['تەكلىپتەۋسىيەلىرىگە', 'تەكلىپ-تەۋسىيەلىرىگە']
# for tw in test_words:
#     print(f"{tw} -> {uighur_syllabize(tw.strip())}")

# تەكلىپتەۋسىيەلىرىگە -> ['تەك', 'لىپ', 'تەۋ', 'سى', 'يە', 'لى', 'رى', 'گە']
# تەكلىپ-تەۋسىيەلىرىگە -> ['تەك', 'لىپ-', 'تەۋ', 'سى', 'يە', 'لى', 'رى', 'گە']



text = "	ھەر قانداق ئىشتا كىشىلەر بىلەن كېڭىشىش كېرەك. لېكىن كۆڭۈل تارتقان ئىشنى قىلىۋېرىش كېرەك."
text = "\" 15 يىل بۇرۇن مەن بىلەن سەي چۇڭشىن (ئالى بابانىڭ قۇرغۇچىسىدىن بىرى) ئامېرىكىغا بېرىپ 30 نەچچە مەبلەغ سالغۇچى شىركەتلەر بىلەن كۆرۈشكىنىمىزدە ئۇلار بىزنى رەت قىلىپ ئىشىك سىرتىدا قالدۇرغاندى. ھېچكىم بىزگە ۋە كەلگۈسىمىزگە ئىشەنمىگەن ئىدى، ھېچكىممۇ بىزنىڭ ھازىر 300 مىليارد سودىنى تاماملىيالايدىغانلىقىمىزنى ئويلاپ خىيالىغىمۇ كەلتۈرمىگەن ئىدى.\" ئالى بابانىنىڭ ئورگىنى تەرىپىدىن ئىشلەنگەن ئىگىلىك تىكلەش ھۆججەتلىك فىلىمى \" بۇ چۈش ئەمەس\" نىڭ باش قىسمىدا مۇنداق بىر داڭلىق سۆز چىقىدۇ:\" مەن تاغدىن ئۆتكەن ۋاقتىمدا تاغ ماڭا گەپ قىلمىدى، مەن دېڭىزنى كېچىپ ئۆتكىنىمدە دېڭىز ماڭا گەپ قىلمىدى.\" بۇ فىلىمنىڭ قوشۇمچە ئىسمى بولسا \" مايۈن ۋە ئۇنىڭ مەڭگۈلۈك ' ياش ئالى'سى\" بولۇپ، ھەرخىل خەتەر ۋە قىيىنلىقنى بىرمۇ بىر يەڭگەن مايۈن ۋە ئۇنىڭ ئالى بابا قوشۇنىدىكى ھەمكارلاشقۇچىلىرىنىڭ قەيسەر كەچمىشى جانلىق بايان قىلىنغان."
text = "يۆ جيەنتاۋ يېقىنقى بىر مەزگىلدە، خىزمەتداشلىرى بىلەن نۇرغۇن قىيىنچىلىققا ئۇچرىغان شوپۇرغا ياردەم قىلغانلىقىنى، شۇنداقلا يېمەكلىك ۋە سۇ يەتكۈزۈپ بەرگەنلىكىنى، ئەمما ئاياغ سوۋغا قىلىشى تۇنجى قېتىم ئىكەنلىكىنى، بۈگۈنكىسى 20 يىللىق ساقچىلىق جەريانىدا تۇنجى قېتىم شوپۇرغا ئاياغ سوۋغا قىلىشى ئىكەنلىكىنى ئېيتتى."
text = "يۆ جۇڭمىڭ مۇنداق دېدى: 2019- يىلى 12-ئايدا، مەملىكەتلىك خەلق قۇرۇلتىيى دائىمىي كومىتېتىنىڭ 44- قېتىملىق كومىتېت باشلىقلىرى يىغىنى مەملىكەتلىك خەلق قۇرۇلتىيى دائىمىي كومىتېتىنىڭ 2020-يىللىق قانۇن چىقىرىش خىزمىتى پىلانىنى پىرىنسىپ جەھەتتىن ماقۇللىدى، خىزمەت تەرتىپى بويىچە، 13-نۆۋەتلىك مەملىكەتلىك خەلق قۇرۇلتىيى 3-يىغىنىنىڭ روھى ۋە ۋەكىللەرنىڭ تەكلىپ-تەۋسىيەلىرىگە ئاساسەن پىلاننى تەڭشەش كېرەك. بۇ يىل 6-ئاينىڭ 1-كۈنى، 58-قېتىملىق كومىتېت باشلىقلىرى يىغىنى تەڭشەلگەندىن كېيىنكى يىللىق قانۇن چىقىرىش خىزمىتى پىلانىنى قاراپ چىقىپ ماقۇللىدى."
text = "مەن مەكتەپكە باردىم"

# text = normalize_extended_uyghur_characters(text=text)
# print(clean_uyghur(text=text))

def process_text(text: str) -> list[str]:
    text = clean_input_text(text=text)
    result = []
    current_word_chars = []
    
    for char in text:
        if char in UYGHUR_LETTERS:
            current_word_chars.append(char)
        else:
            # 遇到非字母字符，先处理缓存的单词
            if current_word_chars:
                word = ''.join(current_word_chars)
                result.extend(uighur_syllabize(word))
                current_word_chars.clear()
            # 非字母字符直接加入
            result.append(char)
    
    # 处理末尾的单词
    if current_word_chars:
        word = ''.join(current_word_chars)
        result.extend(uighur_syllabize(word))
    
    return result