<?php

namespace App\Http\Controllers;

use App\Models\Aluno;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;

class AlunosController extends Controller
{
    public function index()
    {
        $user = Auth::user();

        // coordenação/secretaria (ou quem tiver)
        if ($user->can('alunos.ver_todos')) {
            $alunos = Aluno::query()
                ->with(['turma', 'escola', 'user', 'responsaveis'])
                ->orderBy('nome')
                ->get();

            // ✅ mantenha UMA view só (ajuste o nome conforme sua tela real)
            return view('escolas.alunos', compact('alunos'));
        }

        // aluno/responsável
        if ($user->can('alunos.ver_meus')) {
            $alunos = Aluno::query()
                ->with(['turma', 'escola', 'user', 'responsaveis'])
                ->where(function ($q) use ($user) {
                    $q->where('user_id', $user->id)
                      ->orWhereHas('responsaveis', function ($r) use ($user) {
                          $r->where('users.id', $user->id);
                      });
                })
                ->orderBy('nome')
                ->get();

            // ✅ a mesma view (evita duplicar telas)
            return view('escolas.alunos', compact('alunos'));
        }

        abort(403);
    }

    public function updateOrCreate(Request $request)
    {
        // ✅ Validação mínima (ajuste se quiser campos extras)
        $data = $request->validate([
            'cpf' => ['required', 'string', 'max:20'],
            'nome' => ['required', 'string', 'max:255'],
            'id_turma' => ['required', 'integer', 'exists:turmas,id'],
            'id_escola' => ['required', 'integer', 'exists:escolas,id'],
            'data_nascimento' => ['required', 'date'],
            'data_inscricao' => ['required', 'date'],
            'user_id' => ['nullable', 'integer', 'exists:users,id'],

            // ✅ múltiplos responsáveis (users ids)
            'responsavel_ids' => ['nullable', 'array'],
            'responsavel_ids.*' => ['integer', 'exists:users,id'],
        ]);

        DB::beginTransaction();

        try {
            $aluno = Aluno::updateOrCreate(
                ['cpf' => $data['cpf']],
                [
                    'nome' => $data['nome'],
                    'id_turma' => $data['id_turma'],
                    'id_escola' => $data['id_escola'],
                    'data_nascimento' => $data['data_nascimento'],
                    'data_inscricao' => $data['data_inscricao'],
                    'cpf' => $data['cpf'],
                    'user_id' => $data['user_id'] ?? null,
                ]
            );

            // ✅ Pivot N:N responsáveis (se vier no request)
            // - syncWithoutDetaching: adiciona sem apagar os existentes
            // - sync: substitui os existentes
            if (!empty($data['responsavel_ids'])) {
                $aluno->responsaveis()->sync($data['responsavel_ids']);
            }

            DB::commit();

            return redirect()
                ->route('alunos')
                ->with('success', 'Aluno Criado|Atualizado com sucesso.');

        } catch (\Throwable $e) {
            DB::rollBack();
            throw $e;
        }
    }
}
