<?php

declare(strict_types=1);

use App\Models\Administrador;
use App\Models\CredencialProfesional;
use App\Models\Foto;
use App\Models\Persona;
use Illuminate\Contracts\Console\Kernel;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;

require __DIR__ . '/vendor/autoload.php';

$app = require __DIR__ . '/bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();

$usuario = env('ADMIN_USUARIO', 'admin');
$passwordPlano = env('ADMIN_PASSWORD', 'admin1234');
$correo = env('ADMIN_CORREO', 'admin@abogadaslitoral.com');
$dni = env('ADMIN_DNI', '1');
$nombre = env('ADMIN_NOMBRE', 'Usuario');
$apellido = env('ADMIN_APELLIDO', 'Administrador');
$cuil = env('ADMIN_CUIL', '20-1-0');
$fechaNac = env('ADMIN_FECHANAC', '2026-01-01');

try {
	DB::transaction(function () use ($usuario, $passwordPlano, $correo, $dni, $nombre, $apellido, $cuil, $fechaNac): void {
		$foto = Foto::firstOrCreate(
			['ruta' => 'avatars/admin-default.png'],
			[
				'extension' => 'png',
				'nombre' => 'admin-default',
				'mime_type' => 'image/png',
				'tamanio_bytes' => 0,
			]
		);

		$persona = Persona::updateOrCreate(
			['dni' => $dni],
			[
				'nombre' => $nombre,
				'apellido' => $apellido,
				'cuil' => $cuil,
				'fechanac' => $fechaNac,
				'foto_id' => $foto->id,
			]
		);

		$credencial = CredencialProfesional::updateOrCreate(
			['usuario' => $usuario],
			[
				'contra' => Hash::make($passwordPlano),
				'rol' => 'ADMIN',
			]
		);

		Administrador::updateOrCreate(
			['dni' => $dni, 'correo' => $correo],
			[
				'persona_id' => $persona->id,
				'credencialprofesional_id' => $credencial->id,
			]
		);
	});

	echo "Administrador creado/actualizado correctamente." . PHP_EOL;
	echo "Usuario: {$usuario}" . PHP_EOL;
	echo "Correo: {$correo}" . PHP_EOL;
} catch (Throwable $e) {
	fwrite(STDERR, 'Error al crear administrador: ' . $e->getMessage() . PHP_EOL);
	exit(1);
}
