<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     * Variantes de Produto - Permite múltiplas opções de venda por produto
     * Ex: Garrafa de vinho pode ser vendida como Garrafa, Taça, Meia Taça, Degustar
     */
    public function up(): void
    {
        Schema::create('product_variants', function (Blueprint $table) {
            $table->id();
            $table->foreignId('product_sheet_id')->constrained()->onDelete('cascade');
            
            // Nome da variante (ex: "Garrafa", "Taça", "Meia Taça", "Degustar")
            $table->string('name');
            
            // Porção relativa ao produto base (ex: 1.0 = garrafa inteira, 0.1333 = taça de 100ml de 750ml)
            $table->decimal('portion_ratio', 8, 4)->default(1);
            
            // Quantidade que pode ser obtida do produto base (ex: 7.5 taças de uma garrafa)
            $table->decimal('quantity_per_unit', 8, 2)->nullable();
            
            // Volume em ml (para bebidas)
            $table->integer('volume_ml')->nullable();
            
            // CMV proporcional (calculado automaticamente: CMV_total × portion_ratio)
            $table->decimal('cmv_portion', 15, 2)->default(0);
            
            // Markup específico para esta variante (pode ser diferente do markup geral)
            $table->decimal('markup', 8, 4)->nullable();
            
            // Preço de venda calculado
            $table->decimal('sale_price', 15, 2)->nullable();
            
            // Margem de contribuição
            $table->decimal('contribution_margin', 15, 2)->nullable();
            $table->decimal('margin_percentage', 8, 2)->nullable();
            
            // Se é a variante padrão
            $table->boolean('is_default')->default(false);
            
            // Ordem de exibição
            $table->integer('sort_order')->default(0);
            
            $table->timestamps();
            
            // Índices
            $table->index(['product_sheet_id', 'sort_order']);
            $table->index(['product_sheet_id', 'is_default']);
        });
        
        // Adicionar campo de volume base ao product_sheets para cálculos de porção
        Schema::table('product_sheets', function (Blueprint $table) {
            $table->integer('base_volume_ml')->nullable()->after('category');
            $table->integer('standard_portion_ml')->nullable()->after('base_volume_ml');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('product_variants');
        
        Schema::table('product_sheets', function (Blueprint $table) {
            $table->dropColumn(['base_volume_ml', 'standard_portion_ml']);
        });
    }
};
