<?php

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

/**
 * Tabel products adalah inti katalog.
 *
 * CATATAN PENTING:
 * - TIDAK ADA kolom stock. Admin mengecek stok secara manual.
 * - commission_type & commission_value nullable.
 *   NULL berarti gunakan default dari partner.
 * - is_featured untuk menampilkan produk unggulan di beranda
 *   tanpa harus selalu membuat banner baru.
 * - sort_order untuk mengatur urutan tampil produk di katalog.
 *   Admin bisa drag-and-drop atau isi angka urutan tanpa ubah tanggal.
 *   Default 0 = urutan belum diatur (tampil berdasarkan created_at).
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->foreignId('category_id')
                ->constrained('categories')
                ->restrictOnDelete(); // cegah hapus kategori yang masih punya produk

            $table->foreignId('partner_id')
                ->constrained('partners')
                ->restrictOnDelete(); // cegah hapus partner yang masih punya produk

            $table->string('name');
            $table->string('slug')->unique();
            $table->text('description')->nullable();

            // Harga
            $table->decimal('buy_price', 12, 2)->default(0);  // harga beli dari partner
            $table->decimal('sell_price', 12, 2);              // harga jual ke customer

            // Komisi: NULL = pakai default partner
            $table->enum('commission_type', ['percent', 'fixed'])->nullable();
            $table->decimal('commission_value', 10, 2)->nullable();

            $table->string('unit', 50)->default('pcs'); // pcs, kg, liter, porsi, dll

            // Satu gambar utama (KOD-04 diputuskan: satu foto)
            $table->string('image')->nullable();

            $table->boolean('is_active')->default(true);
            $table->boolean('is_featured')->default(false);

            // Urutan tampil di katalog. 0 = belum diatur.
            // Query default: ORDER BY sort_order ASC, created_at DESC
            $table->unsignedSmallInteger('sort_order')->default(0);

            $table->timestamps();
            $table->softDeletes();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('products');
    }
};
