"""
Terminology Extractor - Configuration
=====================================
Tüm ayarlar bu dosyadan yönetilir.
Dosya yollarını buradan değiştirin, koda gömmeyin!
"""

import os

# === BASE PATHS ===
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_ROOT = os.path.dirname(BASE_DIR)  # PEPCVSON

# === INPUT/OUTPUT PATHS ===
# Test için mevcut translation_memory.csv kullanılıyor
INPUT_FILE = os.path.join(PROJECT_ROOT, "glossary_cleaner/data/translation_memory.csv")
OUTPUT_DIR = os.path.join(BASE_DIR, "output")

# Alternatif: Kendi dosyanızı kullanmak için:
# INPUT_FILE = os.path.join(BASE_DIR, "input_data.csv")

# === DEBUG MODE ===
# True: Sadece LIMIT kadar satır işle (test için)
# False: Tüm veriyi işle (production)
DEBUG_MODE = True
LIMIT = 100  # Debug modda maksimum satır sayısı

# === CHUNK PROCESSING (HIGH PERFORMANCE - 128GB RAM) ===
# Veriyi parça parça okur, multiprocessing ile dağıtır
CHUNK_SIZE = 5000   # pd.read_csv chunksize (progress bar için optimal)
BATCH_SIZE = 200    # Her worker'a gönderilecek satır sayısı
QUEUE_SIZE = 100    # İş kuyruğu boyutu

# === FILTERING (HIGH PRECISION MODE) ===
# Kaliteli girdi için agresif filtreleme - sadece %100'e yakın doğrular
MIN_FREQUENCY = 3      # Minimum tekrar sayısı (nadir terimler filtrelenir)
MIN_CONFIDENCE = 0.75  # Minimum hizalama skoru (HIGH PRECISION: 0.75+)
MAX_TERM_WORDS = 4     # Maksimum kelime sayısı (çok uzun ifadeler filtrelenir)
MIN_TERM_LENGTH = 2    # Minimum karakter sayısı

# === PRECISION SETTINGS ===
HIGH_PRECISION_MODE = True  # True: Emin olunmayanları agresif ele
UNCERTAIN_THRESHOLD = 0.85  # Bu skorun altındakiler "uncertain" sayılır

# === HARDWARE (HIGH PERFORMANCE - Hetzner AX102) ===
CPU_ONLY = True        # GPU yoksa True
NUM_WORKERS = 30       # 32 thread - 2 (OS için) = 30 worker
TORCH_THREADS = 1      # Her worker tek thread (çakışma önleme)
MAX_TASKS_PER_CHILD = 100  # Memory leak önleme

# === SPACY MODELS ===
SPACY_EN_MODEL = "en_core_web_sm"  # İngilizce model
SPACY_TR_MODEL = "xx_ent_wiki_sm"  # Türkçe için multilingual (tr_core_news_sm yoksa)

# === SIMALIGN SETTINGS ===
ALIGNMENT_MODEL = "bert-base-multilingual-cased"
ALIGNMENT_METHOD = "inter"  # HIGH PRECISION: "inter" daha keskin (mwmf, inter, itermax)

# === OUTPUT FILES ===
OUTPUT_GLOSSARY_CANDIDATES = os.path.join(OUTPUT_DIR, "glossary_candidates.csv")
OUTPUT_DEEPL_GLOSSARY = os.path.join(OUTPUT_DIR, "deepl_glossary.csv")
OUTPUT_GOOGLE_AUTOML = os.path.join(OUTPUT_DIR, "google_automl.tsv")
OUTPUT_LOG = os.path.join(OUTPUT_DIR, "processing_log.txt")
OUTPUT_CHECKPOINT = os.path.join(OUTPUT_DIR, "checkpoint.json")

# === STOP WORDS ===
# İngilizce stop words (glossary'ye alınmayacak)
ENGLISH_STOP_WORDS = {
    'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
    'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
    'should', 'may', 'might', 'must', 'shall', 'can', 'need', 'dare',
    'ought', 'used', 'to', 'of', 'in', 'for', 'on', 'with', 'at', 'by',
    'from', 'as', 'into', 'through', 'during', 'before', 'after', 'above',
    'below', 'between', 'under', 'again', 'further', 'then', 'once',
    'here', 'there', 'when', 'where', 'why', 'how', 'all', 'each', 'few',
    'more', 'most', 'other', 'some', 'such', 'no', 'nor', 'not', 'only',
    'own', 'same', 'so', 'than', 'too', 'very', 'just', 'and', 'but',
    'if', 'or', 'because', 'until', 'while', 'this', 'that', 'these',
    'those', 'it', 'its', 'i', 'me', 'my', 'myself', 'we', 'our', 'ours',
    'you', 'your', 'yours', 'he', 'him', 'his', 'she', 'her', 'hers',
    'they', 'them', 'their', 'what', 'which', 'who', 'whom'
}

# Türkçe stop words
TURKISH_STOP_WORDS = {
    'bir', 'bu', 'şu', 'o', 've', 'ile', 'için', 'de', 'da', 'den', 'dan',
    'mi', 'mı', 'mu', 'mü', 'ne', 'ki', 'gibi', 'kadar', 'daha', 'en',
    'çok', 'az', 'her', 'hiç', 'bazı', 'bütün', 'tüm', 'diğer', 'başka',
    'aynı', 'böyle', 'şöyle', 'öyle', 'nasıl', 'neden', 'niçin', 'nerede',
    'kim', 'kendi', 'ben', 'sen', 'biz', 'siz', 'onlar', 'benim', 'senin',
    'onun', 'bizim', 'sizin', 'onların', 'bana', 'sana', 'ona', 'bize',
    'size', 'olarak', 'olan', 'olup', 'olmak', 'etmek', 'yapmak', 'var',
    'yok', 'ise', 'ama', 'fakat', 'ancak', 'lakin', 'veya', 'ya', 'hem',
    'sadece', 'yalnız', 'bile', 'dahi', 'hatta', 'üzere', 'göre', 'karşı',
    'doğru', 'sonra', 'önce', 'içinde', 'dışında', 'üzerinde', 'altında',
    'yanında', 'arasında', 'boyunca', 'esnasında', 'sırasında'
}

# === POS TAGS TO KEEP ===
# Sadece bu türdeki kelimeler glossary'ye alınır
ALLOWED_POS_TAGS = {'NOUN', 'PROPN', 'ADJ'}  # İsim, Özel isim, Sıfat

# Fiiller glossary'ye alınmaz
EXCLUDED_POS_TAGS = {'VERB', 'AUX', 'ADP', 'DET', 'PRON', 'CONJ', 'SCONJ', 'PART', 'INTJ'}

