import os
import re
import uuid
import pyarabic.araby as araby

sentiment_analyzer = None

def get_sentiment_logic(text, lang):
    rate, pitch, volume = "+0%", "+0Hz", "+0%"
    if lang == "en":
        try:
            from textblob import TextBlob
            analysis = TextBlob(text)
            # Polarity is between -1.0 and 1.0
            if analysis.sentiment.polarity > 0.1:
                rate, pitch, volume = "+10%", "+3Hz", "+5%"
            elif analysis.sentiment.polarity < -0.1:
                rate, pitch, volume = "-10%", "-3Hz", "+15%"
        except: pass
    
    if "!" in text or text.isupper():
        volume, pitch, rate = "+25%", "+5Hz", "+5%"
    if "?" in text:
        pitch, rate = "+10Hz", "-5%"
    if len(re.findall(r'(.)\1{2,}', text)):
        rate, pitch = "-25%", "+12Hz"
    return rate, pitch, volume

def remove_file(path: str):
    if os.path.exists(path):
        try: os.remove(path)
        except: pass

def split_text_by_language(text):
    # Split by English/Latin blocks
    parts = re.split(r'([a-zA-Z][a-zA-Z0-9\s\-\.\,\!\?\'\"]*[a-zA-Z0-9]|[a-zA-Z])', text)
    segments = []
    for part in parts:
        if not part or not part.strip():
            continue
        if re.search(r'[a-zA-Z]', part):
            segments.append((part.strip(), "en"))
        else:
            if re.search(r'[\u0600-\u06FF0-9]', part) or len(part.strip()) > 1:
                segments.append((part.strip(), "ar"))
    return segments


def apply_smart_tashkeel(text):
    # 1. Normalize text using PyArabic for better consistency
    normalized_text = araby.strip_tashkeel(text)
    normalized_text = araby.normalize_hamza(normalized_text)
    
    # 2. Use Mishkal for general sentence vocalization
    try:
        import mishkal.tashkeel
        vocalizer = mishkal.tashkeel.TashkeelClass()
        final_text = vocalizer.tashkeel(normalized_text)
        return final_text
    except Exception as e:
        print(f"Tashkeel Error: {e}")
        return normalized_text
