<?php

namespace App\Http\Controllers;

use App\Domain\Empresa\DTO\CriarEmpresaDTO;
use App\Domain\Empresa\DTO\EmpresaListagemDTO;
use App\Domain\Empresa\Services\EmpresaService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;

class EmpresaController extends Controller
{
    public function __construct(
        private readonly EmpresaService $service
    ) {}

    public function index(Request $request): JsonResponse
    {
        $empresas = $this->service->listar();
        
        $empresas->getCollection()->transform(function ($empresa) {
            return EmpresaListagemDTO::fromModel($empresa);
        });

        return response()->json($empresas);
    }

    public function store(Request $request): JsonResponse
    {
        try {
            $dados = $request->validate([
                'nome' => 'required|string|min:3|max:255',
                'cnpj' => 'required|string|size:14',
                'email' => 'nullable|email|max:255',
                'telefone' => 'nullable|string|min:10|max:11'
            ]);

            $dto = CriarEmpresaDTO::fromArray($dados);
            $empresa = $this->service->criar($dto);

            return response()->json([
                'data' => [
                    'id' => $empresa->id,
                    'nome' => $empresa->nome,
                    'cnpj' => $empresa->cnpj,
                    'email' => $empresa->email,
                    'telefone' => $empresa->telefone,
                    'created_at' => $empresa->created_at,
                    'updated_at' => $empresa->updated_at
                ],
                'message' => 'Empresa criada com sucesso'
            ], 201);
        } catch (ValidationException $e) {
            return response()->json([
                'message' => 'Dados inválidos',
                'errors' => $e->errors()
            ], 422);
        } catch (\Exception $e) {
            return response()->json([
                'message' => 'Erro ao criar empresa',
                'error' => $e->getMessage()
            ], 500);
        }
    }

    public function destroy(int $id): JsonResponse
    {
        try {
            $this->service->excluir($id);

            return response()->json([
                'message' => 'Empresa excluída com sucesso'
            ]);
        } catch (\Exception $e) {
            return response()->json([
                'message' => 'Erro ao remover empresa'
            ], 500);
        }
    }
} 