<?php 

namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class CreateKasAndHRModule extends Migration
{
    public function up(): void
    {
        // --------------------------------------------------------------------
        // 1. TB_TRANSAKSI_KAS
        // --------------------------------------------------------------------
        $this->forge->addField([
            'id_transaksi_kas' => [
                'type'           => 'INT',
                'constraint'     => 11,
                'unsigned'       => true,
                'auto_increment' => true,
            ],
            'tanggal_transaksi_kas' => [
                'type' => 'DATE',
                'null' => false,
            ],
            'tipe_transaksi_kas' => [
                'type'       => 'ENUM',
                'constraint' => ['Pemasukan', 'Pengeluaran'],
                'null'       => false,
            ],
            'kategori_transaksi_kas' => [
                'type'       => 'VARCHAR',
                'constraint' => 100,
                'null'       => false,
            ],
            'keterangan_transaksi_kas' => [
                'type' => 'TEXT',
                'null' => true,
            ],
            'nominal_transaksi_kas' => [
                'type'       => 'DECIMAL',
                'constraint' => '15,2',
                'null'       => false,
                'default'    => '0.00',
            ],
            'created_at' => [
                'type'    => 'DATETIME',
                'null'    => true,
                'default' => null,
            ],
            'updated_at' => [
                'type'    => 'DATETIME',
                'null'    => true,
                'default' => null,
            ],
        ]);

        $this->forge->addKey('id_transaksi_kas', true);
        $this->forge->createTable('tb_transaksi_kas');

        // --------------------------------------------------------------------
        // 2. TB_KARYAWAN
        // --------------------------------------------------------------------
        $this->forge->addField([
            'id_karyawan' => [
                'type'           => 'INT',
                'constraint'     => 11,
                'unsigned'       => true,
                'auto_increment' => true,
            ],
            'nama_karyawan' => [
                'type'       => 'VARCHAR',
                'constraint' => 150,
                'null'       => false,
            ],
            'posisi_karyawan' => [
                'type'       => 'VARCHAR',
                'constraint' => 100,
                'null'       => true,
            ],

            // TAMBAHAN STATUS KARYAWAN
            'status_karyawan' => [
                'type'       => 'ENUM',
                'constraint' => ['Aktif', 'Nonaktif'],
                'default'    => 'Aktif',
                'null'       => false,
            ],

            'rate_gaji_per_jam_karyawan' => [
                'type'       => 'DECIMAL',
                'constraint' => '10,2',
                'null'       => false,
                'default'    => '10000.00',
            ],
            'created_at' => [
                'type'    => 'DATETIME',
                'null'    => true,
                'default' => null,
            ],
            'updated_at' => [
                'type'    => 'DATETIME',
                'null'    => true,
                'default' => null,
            ],
        ]);

        $this->forge->addKey('id_karyawan', true);
        $this->forge->createTable('tb_karyawan');

        // --------------------------------------------------------------------
        // 3. TB_ABSENSI
        // --------------------------------------------------------------------
        $this->forge->addField([
            'id_absensi' => [
                'type'           => 'INT',
                'constraint'     => 11,
                'unsigned'       => true,
                'auto_increment' => true,
            ],
            'id_karyawan' => [
                'type'       => 'INT',
                'constraint' => 11,
                'unsigned'   => true,
                'null'       => false,
            ],
            'tanggal_absensi' => [
                'type' => 'DATE',
                'null' => false,
            ],
            'jam_masuk_absensi' => [
                'type'    => 'TIME',
                'null'    => true,
            ],
            'jam_keluar_absensi' => [
                'type'    => 'TIME',
                'null'    => true,
            ],

            // TAMBAHAN SESI
            'sesi' => [
                'type' => 'TEXT',
                'null' => true,
            ],

            'total_jam_kerja_absensi' => [
                'type'       => 'DECIMAL',
                'constraint' => '5,2',
                'null'       => true,
                'default'    => '0.00',
            ],
            'created_at' => [
                'type'    => 'DATETIME',
                'null'    => true,
                'default' => null,
            ],
            'updated_at' => [
                'type'    => 'DATETIME',
                'null'    => true,
                'default' => null,
            ],
        ]);

        $this->forge->addKey('id_absensi', true);
        $this->forge->addForeignKey(
            'id_karyawan',
            'tb_karyawan',
            'id_karyawan',
            'CASCADE',
            'CASCADE'
        );

        $this->forge->createTable('tb_absensi');

        // --------------------------------------------------------------------
        // 4. TB_PENGGAJIAN
        // --------------------------------------------------------------------
        $this->forge->addField([
            'id_penggajian' => [
                'type'           => 'INT',
                'constraint'     => 11,
                'unsigned'       => true,
                'auto_increment' => true,
            ],
            'id_karyawan' => [
                'type'       => 'INT',
                'constraint' => 11,
                'unsigned'   => true,
                'null'       => false,
            ],
            'periode_bulan_penggajian' => [
                'type'       => 'VARCHAR',
                'constraint' => 20,
                'null'       => false,
            ],
            'total_jam_penggajian' => [
                'type'       => 'DECIMAL',
                'constraint' => '10,2',
                'default'    => '0.00',
            ],
            'total_gaji_penggajian' => [
                'type'       => 'DECIMAL',
                'constraint' => '15,2',
                'default'    => '0.00',
            ],
            'status_pembayaran_penggajian' => [
                'type'       => 'ENUM',
                'constraint' => ['Belum Dibayar', 'Sudah Dibayar'],
                'default'    => 'Belum Dibayar',
            ],
            'tanggal_bayar_penggajian' => [
                'type' => 'DATETIME',
                'null' => true,
            ],
            'created_at' => [
                'type'    => 'DATETIME',
                'null'    => true,
                'default' => null,
            ],
            'updated_at' => [
                'type'    => 'DATETIME',
                'null'    => true,
                'default' => null,
            ],
        ]);

        $this->forge->addKey('id_penggajian', true);

        $this->forge->addForeignKey(
            'id_karyawan',
            'tb_karyawan',
            'id_karyawan',
            'CASCADE',
            'CASCADE'
        );

        $this->forge->createTable('tb_penggajian');
    }

    public function down(): void
    {
        $this->forge->dropTable('tb_penggajian', true);
        $this->forge->dropTable('tb_absensi', true);
        $this->forge->dropTable('tb_karyawan', true);
        $this->forge->dropTable('tb_transaksi_kas', true);
    }
}