<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     * 
     * Tabel penggajian untuk teknisi per bulan
     * Formula SEDERHANA: Total Ongkos Pekerjaan - Kasbon - Biaya Makan = Gaji Bersih
     */
    public function up(): void
    {
        Schema::create('penggajians', function (Blueprint $table) {
            $table->id('id_penggajian');
            
            // ===================================
            // IDENTITAS & PERIODE
            // ===================================
            $table->unsignedBigInteger('id_teknisi')
                  ->comment('ID teknisi yang digaji');
            
            $table->integer('periode_bulan')
                  ->check('periode_bulan >= 1 AND periode_bulan <= 12')
                  ->comment('Bulan periode gaji (1-12)');
            
            $table->year('periode_tahun')
                  ->comment('Tahun periode gaji');
            
            $table->date('tanggal_penggajian')
                  ->comment('Tanggal gaji dihitung/dibuat');
            
            // ===================================
            // PENDAPATAN (HANYA ONGKOS PEKERJAAN)
            // ===================================
            $table->decimal('total_ongkos_pekerjaan', 12, 2)
                  ->default(0.00)
                  ->comment('Total ongkos dari penugasan yang selesai bulan ini (sudah dibagi tim)');
            
            $table->integer('jumlah_penugasan_selesai')
                  ->default(0)
                  ->comment('Jumlah penugasan yang diselesaikan bulan ini');
            
            $table->integer('jumlah_hari_kerja')
                  ->default(0)
                  ->comment('Jumlah hari kerja efektif bulan ini');
            
            // ===================================
            // POTONGAN (HANYA KASBON & BIAYA MAKAN)
            // ===================================
            $table->decimal('total_kasbon', 12, 2)
                  ->default(0.00)
                  ->comment('Total kasbon yang diambil bulan ini');
            
            $table->decimal('biaya_makan', 12, 2)
                  ->default(0.00)
                  ->comment('Biaya makan yang dipotong dari gaji (hari kerja × tarif makan)');
            
            $table->decimal('total_potongan', 12, 2)
                  ->default(0.00)
                  ->comment('Total potongan = kasbon + biaya_makan');
            
            // ===================================
            // GAJI BERSIH
            // ===================================
            $table->decimal('gaji_bersih', 12, 2)
                  ->default(0.00)
                  ->comment('Gaji bersih = ongkos_pekerjaan - total_potongan');
            
            // ===================================
            // STATUS & PEMBAYARAN
            // ===================================
            $table->enum('status_pembayaran', ['belum_bayar', 'sudah_bayar'])
                  ->default('belum_bayar')
                  ->comment('Status pembayaran gaji');
            
            $table->enum('metode_pembayaran', ['cash', 'transfer'])
                  ->nullable()
                  ->comment('Metode pembayaran');
            
            $table->dateTime('tanggal_dibayar')
                  ->nullable()
                  ->comment('Tanggal gaji benar-benar dibayarkan');
            
            $table->text('bukti_pembayaran')
                  ->nullable()
                  ->comment('Path file/foto bukti transfer');
            
            // ===================================
            // CATATAN
            // ===================================
            $table->text('catatan')
                  ->nullable()
                  ->comment('Catatan tambahan untuk slip gaji ini');
            
            $table->timestamps();
            
            // ===================================
            // FOREIGN KEYS
            // ===================================
            $table->foreign('id_teknisi')
                  ->references('id_teknisi')
                  ->on('teknisis')
                  ->onDelete('cascade');
            
            // ===================================
            // INDEXES
            // ===================================
            $table->unique(['id_teknisi', 'periode_bulan', 'periode_tahun'], 'unique_teknisi_periode');
            $table->index(['periode_tahun', 'periode_bulan'], 'idx_periode');
            $table->index('status_pembayaran', 'idx_status_bayar');
            $table->index('tanggal_penggajian', 'idx_tgl_gaji');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('penggajians');
    }
};
