<?php

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

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('license_token_product', function (Blueprint $table) {

            $table->id();

            // Token vinculado
            $table->foreignId('license_token_id')
                ->constrained('license_tokens')
                ->cascadeOnUpdate()
                ->cascadeOnDelete();

            // Producto vinculado
            $table->foreignId('product_id')
                ->constrained('products')
                ->cascadeOnUpdate()
                ->cascadeOnDelete();

            // Modo de uso de este producto dentro del token
            $table->string('mode', 50)->nullable();
            // Ej: full, trial, limited, custom

            // Estado del producto dentro del token
            $table->string('status', 50)->default('active');
            // active | disabled | expired | limited | pending

            // Ventana de funcionamiento específica del producto
            $table->timestamp('start_at')->nullable();
            $table->timestamp('end_at')->nullable();

            // Notas internas
            $table->text('observation')->nullable();

            // Auditoría: quién asigna este producto al token
            $table->foreignId('assigned_by')
                ->nullable()
                ->constrained('users')
                ->nullOnDelete();

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

            // Un token no debe tener duplicado el mismo producto
            $table->unique(['license_token_id', 'product_id'], 'ltp_unique_pair');
        });
    }

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