<?php

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

/**
 * Migration para adicionar campos de transferência e divisão de transações
 * 
 * Transferências: Uma transação de débito em conta A vinculada a crédito em conta B
 * Divisão: Uma transação pode ter várias categorias (split transactions)
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::table('transactions', function (Blueprint $table) {
            // Campo para vincular transações de transferência
            // A transação de débito aponta para a transação de crédito correspondente
            $table->foreignId('transfer_pair_id')
                ->nullable()
                ->after('recurring_parent_id')
                ->constrained('transactions')
                ->nullOnDelete();
            
            // Campo para identificar transação pai em caso de divisão
            // Transações divididas têm um parent_id apontando para a transação original
            $table->foreignId('parent_transaction_id')
                ->nullable()
                ->after('transfer_pair_id')
                ->constrained('transactions')
                ->nullOnDelete();
            
            // Flag para indicar se é uma transação dividida (filha)
            $table->boolean('is_split_child')->default(false)->after('parent_transaction_id');
            
            // Flag para indicar se a transação original foi dividida
            $table->boolean('is_split_parent')->default(false)->after('is_split_child');
            
            // Índices para performance
            $table->index('transfer_pair_id');
            $table->index('parent_transaction_id');
        });
    }

    public function down(): void
    {
        Schema::table('transactions', function (Blueprint $table) {
            $table->dropForeign(['transfer_pair_id']);
            $table->dropForeign(['parent_transaction_id']);
            $table->dropColumn([
                'transfer_pair_id',
                'parent_transaction_id',
                'is_split_child',
                'is_split_parent',
            ]);
        });
    }
};
