<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;

/**
 * Mevcut tahsilatların ödemeler defterine devri.
 *
 * Ödemeler modülünden önce tahsilat yalnızca `sales.paid_amount` üzerinde
 * toplam bir sayıydı; hareket geçmişi yoktu. Bundan sonra satışın ödenen
 * tutarı ödeme kayıtlarından hesaplanacağı için, geçmiş bakiyeler devir
 * kaydı olarak defterlere yazılır — aksi halde tahsil edilmiş satışlar
 * ilk yeniden hesaplamada "ödenmemiş" görünürdü.
 */
return new class extends Migration
{
    public function up(): void
    {
        $now = now();

        DB::table('sales')
            ->where('paid_amount', '>', 0)
            ->orderBy('id')
            ->select('id', 'agency_id', 'customer_id', 'paid_amount', 'currency', 'created_at', 'sale_code')
            ->chunkById(200, function ($sales) use ($now) {
                foreach ($sales as $sale) {
                    // Aynı satış için devir kaydı zaten varsa tekrarlama
                    $exists = DB::table('payments')
                        ->where('sale_id', $sale->id)
                        ->where('method', 'opening')
                        ->exists();
                    if ($exists) {
                        continue;
                    }

                    $amount = (float) $sale->paid_amount;

                    DB::table('payments')->insert([
                        'agency_id' => $sale->agency_id,
                        'code' => null,
                        'direction' => 'in',
                        'status' => 'completed',
                        'method' => 'opening',
                        'provider' => null,
                        'category' => 'sale',
                        'amount' => $amount,
                        'currency' => $sale->currency ?: 'TRY',
                        'exchange_rate' => 1,
                        'base_amount' => $amount,
                        'fee_amount' => 0,
                        'net_amount' => $amount,
                        'paid_at' => $sale->created_at ?: $now,
                        'sale_id' => $sale->id,
                        'counterparty_type' => $sale->customer_id ? \App\Models\Customer\Customer::class : null,
                        'counterparty_id' => $sale->customer_id,
                        'description' => 'Devir kaydı — ödemeler modülü öncesi tahsilat',
                        'created_at' => $now,
                        'updated_at' => $now,
                    ]);
                }
            });
    }

    public function down(): void
    {
        DB::table('payments')->where('method', 'opening')->delete();
    }
};
