# %% [1] IMPORT LIBRARIES & SETUP
import pandas as pd
import numpy as np

print("--- [STEP 1] Memuat Data 15 Mapel & Kuesioner RIASEC ---")
# Set seed agar hasil random selalu sama setiap kali dijalankan
np.random.seed(42)

# %% [2] FUNGSI GENERATOR DATA REALISTIS (30 JURUSAN & RIASEC)
def generate_realistic_data(n_samples_per_class=200):
    rows = []
    
    # Konfigurasi 30 Jurusan dengan fokus Mapel dan profil RIASEC dominan
    jurusan_config = {
        'Kedokteran': {'mapel': ['biologi', 'kimia', 'matematika'], 'riasec': ['I', 'S'], 'eko_min': ['Mampu', 'Menengah']},
        'Farmasi': {'mapel': ['kimia', 'biologi', 'matematika'], 'riasec': ['I', 'C'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Kesehatan Masyarakat': {'mapel': ['sosiologi', 'biologi'], 'riasec': ['S', 'E'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Ilmu Gizi': {'mapel': ['biologi', 'kimia'], 'riasec': ['I', 'S'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Keperawatan': {'mapel': ['biologi', 'sosiologi'], 'riasec': ['S', 'R'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        
        'Teknik Sipil': {'mapel': ['matematika', 'fisika'], 'riasec': ['R', 'C'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Teknik Mesin': {'mapel': ['fisika', 'matematika'], 'riasec': ['R', 'I'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Teknik Industri': {'mapel': ['fisika', 'ekonomi_mapel'], 'riasec': ['E', 'I'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Teknik Pertambangan': {'mapel': ['fisika', 'geografi', 'matematika'], 'riasec': ['R', 'E'], 'eko_min': ['Mampu', 'Menengah']},
        'Teknik Geologi': {'mapel': ['geografi', 'fisika', 'kimia'], 'riasec': ['I', 'R'], 'eko_min': ['Mampu', 'Menengah']},
        
        'Teknik Informatika': {'mapel': ['informatika', 'matematika'], 'riasec': ['I', 'C'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Sistem Informasi': {'mapel': ['informatika', 'ekonomi_mapel'], 'riasec': ['C', 'I'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        
        'Pertanian': {'mapel': ['biologi', 'geografi'], 'riasec': ['R', 'I'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Peternakan': {'mapel': ['biologi', 'ekonomi_mapel'], 'riasec': ['R', 'E'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Agribisnis': {'mapel': ['ekonomi_mapel', 'biologi'], 'riasec': ['E', 'R'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        
        'Akuntansi': {'mapel': ['ekonomi_mapel', 'matematika'], 'riasec': ['C', 'E'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Manajemen': {'mapel': ['ekonomi_mapel', 'sosiologi'], 'riasec': ['E', 'C'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Ilmu Ekonomi': {'mapel': ['ekonomi_mapel', 'matematika', 'sejarah'], 'riasec': ['I', 'C'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        
        'Ilmu Hukum': {'mapel': ['pkn', 'sosiologi', 'bahasa_indonesia'], 'riasec': ['E', 'S'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Hubungan Internasional': {'mapel': ['bahasa_inggris', 'sejarah', 'pkn'], 'riasec': ['E', 'S'], 'eko_min': ['Mampu', 'Menengah']},
        'Ilmu Komunikasi': {'mapel': ['bahasa_indonesia', 'sosiologi', 'bahasa_inggris'], 'riasec': ['E', 'A'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Psikologi': {'mapel': ['sosiologi', 'bahasa_indonesia', 'biologi'], 'riasec': ['S', 'I'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Administrasi Negara': {'mapel': ['pkn', 'sosiologi'], 'riasec': ['C', 'E'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        
        'Desain Komunikasi Visual': {'mapel': ['seni_budaya', 'informatika'], 'riasec': ['A', 'E'], 'eko_min': ['Mampu', 'Menengah']},
        'Arsitektur': {'mapel': ['seni_budaya', 'fisika', 'matematika'], 'riasec': ['A', 'I'], 'eko_min': ['Mampu', 'Menengah']},
        'Sastra Inggris': {'mapel': ['bahasa_inggris', 'sejarah', 'seni_budaya'], 'riasec': ['A', 'S'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        
        'Pendidikan Guru SD': {'mapel': ['pkn', 'bahasa_indonesia', 'seni_budaya'], 'riasec': ['S', 'C'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Pendidikan Matematika': {'mapel': ['matematika', 'pkn'], 'riasec': ['S', 'I'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        'Pendidikan Jasmani': {'mapel': ['pjok', 'biologi'], 'riasec': ['S', 'R'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']},
        
        'Pariwisata': {'mapel': ['bahasa_inggris', 'geografi', 'seni_budaya'], 'riasec': ['E', 'S'], 'eko_min': ['Mampu', 'Menengah', 'Kurang Mampu']}
    }
    
    siswa_id = 1
    
    for jurusan, config in jurusan_config.items():
        for _ in range(n_samples_per_class):
            # 1. Base Scores Mapel (Acak Normal 75-84)
            scores = {k: np.random.randint(75, 85) for k in [
                'agama', 'pkn', 'bahasa_indonesia', 'bahasa_inggris', 'matematika', 
                'fisika', 'kimia', 'biologi', 'sejarah', 'geografi', 
                'ekonomi_mapel', 'sosiologi', 'seni_budaya', 'pjok', 'informatika'
            ]}
            # Naikkan skor mapel utama jurusan tersebut
            for m in config['mapel']:
                scores[m] = np.random.randint(88, 98)
                
            # 2. Base Scores Kuesioner RIASEC (Acak Normal 50-70)
            riasec = {k: np.random.randint(50, 71) for k in ['R', 'I', 'A', 'S', 'E', 'C']}
            # Naikkan skor RIASEC dominan jurusan tersebut
            for r_key in config['riasec']:
                riasec[r_key] = np.random.randint(85, 98)
                
            # 3. Ekonomi Orang Tua
            eko = np.random.choice(config['eko_min'])
            
            # 4. Susun Baris Data
            row = [f"SW{siswa_id:05d}", f"Siswa_{siswa_id}"] + \
                  list(scores.values()) + \
                  [riasec['R'], riasec['I'], riasec['A'], riasec['S'], riasec['E'], riasec['C']] + \
                  [eko, jurusan]
                  
            rows.append(row)
            siswa_id += 1

    columns = ['id_siswa', 'nama_lengkap', 
               'agama', 'pkn', 'bahasa_indonesia', 'bahasa_inggris', 'matematika', 
               'fisika', 'kimia', 'biologi', 'sejarah', 'geografi', 
               'ekonomi_mapel', 'sosiologi', 'seni_budaya', 'pjok', 'informatika', 
               'riasec_r', 'riasec_i', 'riasec_a', 'riasec_s', 'riasec_e', 'riasec_c', 
               'ekonomi_orang_tua', 'rekomendasi_jurusan']
    
    # Acak urutan baris data agar tidak terurut per jurusan saat di training
    df = pd.DataFrame(rows, columns=columns)
    df = df.sample(frac=1, random_state=42).reset_index(drop=True)
    return df

# %% [3] EKSEKUSI DAN SIMPAN DATA
# Mengambil 200 sampel per jurusan x 30 jurusan = 6.000 data latih
df_synthetic = generate_realistic_data(n_samples_per_class=200)
df_synthetic.to_csv('dataset_15mapel_bersih.csv', index=False)
print(f"Dataset berhasil dibuat dengan total {len(df_synthetic)} baris!")
print("Fitur baru: Skor RIASEC ditambahkan untuk 30 Jurusan.")
# %%
