<?php

namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class CreateTbProduksiTable extends Migration
{
    public function up(): void
    {
        $this->db->query('
            CREATE TABLE IF NOT EXISTS `tb_produksi` (
                `id_produksi`       INT(11) UNSIGNED    NOT NULL AUTO_INCREMENT,
                `kode_produksi`     VARCHAR(40)         NOT NULL COMMENT \'Contoh: PRD-20260505-001\',
                `id_produk`         INT(11) UNSIGNED    NOT NULL COMMENT \'Produk yang diproduksi\',
                `id_resep`          INT(11) UNSIGNED    NOT NULL COMMENT \'Resep yang digunakan\',
                `jumlah_produksi`   INT(11)             NOT NULL DEFAULT 1 COMMENT \'Jumlah unit/pcs yang diproduksi\',
                `tanggal_produksi`  DATE                NOT NULL,
                `status_produksi`   ENUM(\'draft\',\'proses\',\'selesai\',\'batal\')
                                                        NOT NULL DEFAULT \'draft\'
                                    COMMENT \'Trigger bahan & stok berjalan saat status -> selesai\',
                `biaya_tenaga`      DECIMAL(15,2)       NOT NULL DEFAULT 0.00 COMMENT \'Opsional: biaya tenaga kerja\',
                `biaya_lain`        DECIMAL(15,2)       NOT NULL DEFAULT 0.00 COMMENT \'Opsional: biaya overhead / lain-lain\',
                `total_biaya_bahan` DECIMAL(15,2)       NOT NULL DEFAULT 0.00 COMMENT \'Cache: dihitung otomatis dari detail_produksi\',
                `total_biaya`       DECIMAL(15,2)       NOT NULL DEFAULT 0.00 COMMENT \'total_biaya_bahan + biaya_tenaga + biaya_lain\',
                `hpp_per_unit`      DECIMAL(15,2)       NOT NULL DEFAULT 0.00 COMMENT \'total_biaya / jumlah_produksi\',
                `catatan_produksi`  TEXT                DEFAULT NULL,
                `diselesaikan_oleh` VARCHAR(150)        DEFAULT NULL,
                `created_at`        DATETIME            DEFAULT NULL,
                `updated_at`        DATETIME            DEFAULT NULL,
                `deleted_at`        DATETIME            DEFAULT NULL,
                PRIMARY KEY (`id_produksi`),
                UNIQUE KEY `uq_kode_produksi` (`kode_produksi`),
                KEY `idx_produksi_produk`  (`id_produk`),
                KEY `idx_produksi_resep`   (`id_resep`),
                KEY `idx_produksi_tanggal` (`tanggal_produksi`),
                KEY `idx_produksi_status`  (`status_produksi`),
                CONSTRAINT `fk_produksi_produk`
                    FOREIGN KEY (`id_produk`) REFERENCES `tb_produk` (`id_produk`)
                    ON UPDATE CASCADE,
                CONSTRAINT `fk_produksi_resep`
                    FOREIGN KEY (`id_resep`) REFERENCES `tb_resep` (`id_resep`)
                    ON UPDATE CASCADE
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
              COMMENT=\'Header batch produksi\'
        ');
    }

    public function down(): void
    {
        $this->db->query('ALTER TABLE `tb_produksi` DROP FOREIGN KEY `fk_produksi_produk`');
        $this->db->query('ALTER TABLE `tb_produksi` DROP FOREIGN KEY `fk_produksi_resep`');
        $this->db->query('DROP TABLE IF EXISTS `tb_produksi`');
    }
}