<?php

namespace App\Services;

use App\Models\Formulario;
use Illuminate\Support\Facades\DB;

class FormResolver
{
    /**
     * Resuelve (o crea) el formulario a partir de la clave lógica nit+municipio[+anio+periodo].
     * @param array $payload Debe incluir al menos nit, municipio; opcional anio, periodo, creado_por
     */
    public function resolveOrCreate(array $payload): Formulario
    {
        return DB::transaction(function () use ($payload) {
            $query = Formulario::where('nit', $payload['nit'])
                ->where('municipio', $payload['municipio']);
            if (array_key_exists('anio', $payload))    $query->where('anio', $payload['anio']);
            if (array_key_exists('periodo', $payload)) $query->where('periodo', $payload['periodo']);

            $form = $query->lockForUpdate()->first();
            if (!$form) {
                $form = Formulario::create($payload);
            }
            return $form;
        });
    }
}
