# Konfigurasi untuk Sistem Klasifikasi Jurusan
import os
import sys


def _resource_base_dir():
	"""Direktori dasar untuk sumber daya read-only yang dibundel."""
	if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
		return sys._MEIPASS
	return os.path.dirname(os.path.abspath(__file__))


def _writable_base_dir():
	"""Direktori dasar untuk file runtime yang dapat ditulis (mis. model terlatih)."""
	if getattr(sys, 'frozen', False):
		return os.path.dirname(sys.executable)
	return os.path.dirname(os.path.abspath(__file__))


RESOURCE_BASE_DIR = _resource_base_dir()
WRITABLE_BASE_DIR = _writable_base_dir()


def get_resource_path(relative_path):
	return os.path.join(RESOURCE_BASE_DIR, relative_path)


def get_writable_path(relative_path):
	return os.path.join(WRITABLE_BASE_DIR, relative_path)


def get_app_icon_path():
	"""Tentukan path ikon terbaik untuk aplikasi/jendela jika tersedia."""
	candidates = [
		get_resource_path(os.path.join('img', 'logo_sekolah.ico')),
		get_writable_path(os.path.join('img', 'logo_sekolah.ico')),
		get_resource_path(os.path.join('img', 'Logo_skripsi.ico')),
		get_writable_path(os.path.join('img', 'Logo_skripsi.ico')),
		get_writable_path(os.path.join('img', 'logo_sekolah.png')),
		get_resource_path(os.path.join('img', 'logo_sekolah.png')),
		get_writable_path(os.path.join('img', 'Logo_skripsi.png')),
		get_resource_path(os.path.join('img', 'Logo_skripsi.png')),
		get_writable_path(os.path.join('img', 'logo_sma.ico')),
		get_resource_path(os.path.join('img', 'logo_sma.ico')),
		get_writable_path(os.path.join('img', 'logo_sma.png')),
		get_resource_path(os.path.join('img', 'logo_sma.png')),
	]
	for path in candidates:
		if os.path.exists(path):
			return path
	return ''


# Konfigurasi dataset
TRAIN_DATASET_PATH = get_resource_path(os.path.join('data', 'dataset_smakom_final_train.csv'))
TEST_DATASET_PATH = get_resource_path(os.path.join('data', 'dataset_smakom_final_test.csv'))
DATASET_PATH = TRAIN_DATASET_PATH

# Path model: dapat ditulis untuk retraining, sebagai fallback saat pertama kali dimuat
MODEL_PATH = get_writable_path(os.path.join('models', 'trained_model.pkl'))
BUNDLED_MODEL_PATH = get_resource_path(os.path.join('models', 'trained_model.pkl'))

# Konfigurasi pelatihan
TEST_SIZE = 0.2  # 20% untuk testing, 80% untuk training (300 data: 240 training, 60 testing)
RANDOM_STATE = 42  # nomor acak tetap agar hasil random sama

# Konfigurasi KNN
DEFAULT_K_NEIGHBORS = 27
KNN_WEIGHTS = 'distance'
KNN_METRIC = 'euclidean'
OPTIMIZE_K = True
K_RANGE = range(3, 52, 2)  # Kandidat k untuk GridSearchCV pada data ini: 3,5,7,...,51

# Konfigurasi basis data (sudah ada di db/database.py)
# Konfigurasi performa
CROSS_VALIDATION_FOLDS = 5