<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Mahasiswa extends Model
{
    use HasFactory;

    public function updateSemester($tahunAkademikAktif)
    {
        $tahunAwal = intval(substr($tahunAkademikAktif->nama, 0, 4));

        $semesterStr = trim(strtolower($tahunAkademikAktif->semester));
        $semesterSaatIni = $semesterStr === 'ganjil' ? 1 : 2;

        $semesterBaru = ($tahunAwal - $this->tahun_masuk) * 2 + $semesterSaatIni;

        if ($this->semester !== $semesterBaru) {
            $this->semester = $semesterBaru;
            $this->save();
        }
    }

    protected $fillable = [
        'user_id',
        'nik',
        'jenis_kelamin',
        'tempat_lahir',
        'tanggal_lahir',
        'agama',
        'alamat',
        'no_hp',
        'status_perkawinan',
        'kewarganegaraan',
        'nama_ayah',
        'pekerjaan_ayah',
        'pendidikan_ayah',
        'penghasilan_ayah',
        'nama_ibu',
        'pekerjaan_ibu',
        'pendidikan_ibu',
        'penghasilan_ibu',
        'no_hp_orangtua',
        'alamat_orangtua',
        'nama_sekolah',
        'jurusan',
        'tahun_lulus',
        'fakultas_id',
        'prodi_id',
        'tahun_masuk',
        'semester',
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function fakultas()
    {
        return $this->belongsTo(Fakultas::class);
    }

    public function prodi()
    {
        return $this->belongsTo(Prodi::class);
    }

    public function absensis()
    {
        return $this->hasMany(Absensi::class);
    }

    public function krs()
    {
        return $this->hasMany(Krs::class);
    }

    // Relasi ke krsDetails via KRS
    public function krsDetails()
    {
        return $this->hasManyThrough(
            KrsDetail::class,
            Krs::class,
            'mahasiswa_id',
            'krs_id',
            'id',
            'id'
        );
    }
}
