<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;

class NormalizeOperacionIdsSeeder extends Seeder
{
    private const BARCODE_BASE = 2000000;

    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        DB::transaction(function (): void {
            $this->normalizeOperacionNumeroInTable('operaciones', 'numero');
            $this->normalizeOperacionNumeroInTable('numoperaciones', 'numero');

            foreach ([
                'devolucionprestamos',
                'devoluciontransferencias',
                'dotaciones',
                'prestamos',
                'registrosstock',
                'transferencias',
                'salidasap',
            ] as $table) {
                $this->normalizeOperacionNumeroInTable($table, 'numOperacion');
            }

            if (Schema::hasTable('numoperaciones') && Schema::hasColumn('numoperaciones', 'numero')) {
                $maxNumero = (int) DB::table('operaciones')->max('numero');

                if ($maxNumero > 0) {
                    DB::table('numoperaciones')->update(['numero' => $maxNumero]);
                }
            }
        });
    }

    private function normalizeOperacionNumeroInTable(string $table, string $column): void
    {
        if (! Schema::hasTable($table) || ! Schema::hasColumn($table, $column)) {
            return;
        }

        DB::table($table)
            ->where($column, '>', 0)
            ->where($column, '<', self::BARCODE_BASE)
            ->update([
                $column => DB::raw($column . ' + ' . self::BARCODE_BASE),
            ]);
    }
}
