o
    a4i&                     @   s   d Z ddlZddlZddlZddlZddlmZmZmZm	Z	 ddl
mZ eddZedZeG dd	 d	ZG d
d dZedkrHe ZdS dS )a  
Smart Translator - Gemini Powered Technical Translation
=======================================================
Replaces legacy Regex+DeepL approach with Context-Aware AI Translation.
Uses 'dictionary.db' to enforce technical terminology while maintaining natural grammar.
    N)ListDictTupleOptional)	dataclassDICTIONARY_PATHz/mnt/pdfs/dictionary_v2.dbOPENAI_API_KEYc                   @   s:   e Zd ZU eed< eed< eeef ed< dZeed< dS )TranslationResultoriginal_texttranslated_text
used_terms      ?
confidenceN)__name__
__module____qualname__str__annotations__r   r   float r   r   2/var/www/html/PEPCVSON/scripts/smart_translator.pyr	      s
   
 r	   c                   @   s   e Zd ZdefdedefddZdd Zdd	 Zd"dedededefddZ	dedefddZ
dedeeef fddZdedeeef fddZd#dedededeeef def
ddZdedefd d!ZdS )$SmartTranslatorNapi_key	dict_pathc                 C   st   |pt d| _|| _d | _i | _|   |   | jr1dd lm	} |j
| jd |d| _d S d | _td d S )NGEMINI_API_KEYr   )r   zgemini-2.0-flashu1   ⚠️ Gemini API Key missing for SmartTranslator)osgetenvr   r   conn_term_cache_connect_db_load_dictionarygoogle.generativeaigenerativeai	configureGenerativeModelmodelprint)selfr   r   genair   r   r   __init__   s   zSmartTranslator.__init__c              
   C   sh   zt j| jrt| j| _tj| j_W d S W d S  t	y3 } zt
d|  W Y d }~d S d }~ww )Nu   ⚠️ DB Connection Error: )r   pathexistsr   sqlite3connectr   Rowrow_factory	Exceptionr&   )r'   er   r   r   r   .   s   zSmartTranslator._connect_dbc              
   C   s   | j sdS zF| j  }|d d}| D ]*}|d   }|d   }|| jvr2|| j|< || jvr<|| j|< |d7 }qtd| d W dS  tye } ztd	|  W Y d}~dS d}~ww )
z4Load high-quality terms into memory for quick lookupNab  
                SELECT canonical_tr, canonical_en, category 
                FROM technical_terms 
                WHERE (category IN ('parts-catalog', 'katalog-detailed', 'equipment', 'parts', 'auto-root', 'root', 'user-added') 
                OR category IS NULL)
                AND length(canonical_en) > 2 AND length(canonical_tr) > 2
            r   canonical_trcanonical_en   u   ✓ SmartTranslator loaded z terms.u   ⚠️ Dictionary Load Error: )	r   cursorexecutefetchalllowerstripr   r&   r0   )r'   ccountrowtrenr1   r   r   r   r    6   s    



z SmartTranslator._load_dictionary
user-addedr>   r=   categoryreturnc              
   C   s   | j sdS zQ|  }|  }| j  }|d||f | }|r2|d||||d f n	|d|||f | j   || j|< || j|< td| d|  W dS  t	yp } ztd	|  W Y d
}~dS d
}~ww )z3Add a new term to the dictionary database and cacheFzISELECT id FROM technical_terms WHERE canonical_en = ? OR canonical_tr = ?z
                    UPDATE technical_terms 
                    SET canonical_tr = ?, canonical_en = ?, category = ?, updated_at = CURRENT_TIMESTAMP
                    WHERE id = ?
                r   z
                    INSERT INTO technical_terms (canonical_en, canonical_tr, category, confidence_score)
                    VALUES (?, ?, ?, 1.0)
                u   ✓ Term added/updated: z <-> Tu   ⚠️ Term Add Error: N)
r   r9   r8   r5   r6   fetchonecommitr   r&   r0   )r'   r>   r=   r@   r:   existingr1   r   r   r   add_termL   s0   




zSmartTranslator.add_termtermc              
   C   s   | j sdS zD|  }| j  }|d||f | j   g }| j|}|r2|| || |D ]}|| jv r?| j|= q4t	d|  W dS  t
yc } zt	d|  W Y d}~dS d}~ww )z'Delete a term by English or Turkish keyFzFDELETE FROM technical_terms WHERE canonical_en = ? OR canonical_tr = ?u   ✓ Term deleted: Tu   ⚠️ Term Delete Error: N)r   r9   r8   r5   r6   rC   r   getappendr&   r0   )r'   rF   r:   keys_to_deletevalkr1   r   r   r   delete_termo   s,   





zSmartTranslator.delete_termtextc                 C   s   i }|   }td|}g }d}t|}td|d D ]}t|| d D ]}	d||	|	|  }
||
 q'q|D ]}
|
| jv rK| j|
 ||
< q=|S )Nz\b\w+\b   r4    )	r8   r9   refindalllenrangejoinrH   r   )r'   rM   found_terms
text_lowertokensn_gramsmax_nlengthnigramr   r   r   _find_relevant_terms   s    
z$SmartTranslator._find_relevant_termsc                 C   s
   |  |S )N)r^   )r'   rM   r   r   r   get_relevant_terms   s   
z"SmartTranslator.get_relevant_termsENTRsource_langtarget_langterms_overridec           
   
   C   s   | j s
t||i dS |d ur|n| |}d| d| dtj|dd d| d	}z| j |}|j }t|||d	W S  ty\ }	 zt	d
|	  t||i dW  Y d }	~	S d }	~	ww )Ng        u  
        You are an expert technical translator specializing in CONSTRUCTION MACHINERY and HEAVY EQUIPMENT (Excavators, Loaders, Backhoes, Dozers, etc.).
        
        DOMAIN CONTEXT:
        - The text belongs to the "World of Heavy Machinery" (İş Makinası Dünyası).
        - Avoid generic, medical, or standard IT translations. 
        - For example: "Travel" means "Seyir/Yürüyüş", not "Seyahat". "Shoe" means "Pabuç", not "Ayakkabı".
        
        TASK:
        Translate the input text to za with high technical accuracy.
        
        CRITICAL RULES:
        1. If text is already in z, just correct terminology.
        2. Maintain sentence structure and style.
        3. STRICTLY USE these dictionary terms in your translation: 
           F)ensure_asciizd
        4. Output ONLY the translated text. Do not add explanations.
        
        Input Text: "
"
        r   zTranslation Error: )
r%   r	   r^   jsondumpsgenerate_contentrM   r9   r0   r&   )
r'   rM   rb   rc   rd   relevant_termspromptresponser   r1   r   r   r   	translate   s*   	
zSmartTranslator.translatec              
   C   s~   | j s|S d| d}z| j |}|j }d|v r!|dd}|W S  ty> } ztd|  |W  Y d}~S d}~ww )u`   Kullanıcı sorgusundaki yazım hatalarını düzeltir (Gemini Powered) - Sadece Düzeltme yaparu  
        Act as a spell checker and grammar corrector for Heavy Equipment/Machinery terminology.
        
        Task: 
        1. Correct spelling mistakes (typos) in the input text.
        2. Fix broken sentence structures.
        3. Normalize technical terms (e.g. "yüüyüş" -> "yürüyüş").
        4. Do NOT translate. Keep the original language (Turkish or English).
        5. Output ONLY the corrected text.
        
        Input: "rf   " zCorrection Error: N)r%   ri   rM   r9   replacer0   r&   )r'   rM   rk   rl   corrected_textr1   r   r   r   correct_terminology   s   

z#SmartTranslator.correct_terminology)r?   )r`   ra   N)r   r   r   r   r   r)   r   r    boolrE   rL   r   r^   r_   r	   rm   rr   r   r   r   r   r      s    #!(%r   __main__)__doc__r   rg   r,   rP   typingr   r   r   r   dataclassesr   r   r   r   r	   r   r   tr   r   r   r   <module>   s    
 [
