<?php

namespace App\Http\Controllers;

use App\Models\Escola;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\PermissionRegistrar;


class EscolasController extends Controller
{
    public function index()
    {
        $escolas = Escola::all();

        return view('escolas.index', compact('escolas'));
    }


    public function createOrUpdate(Request $request)
{
    DB::beginTransaction();

    try {

        $escola = Escola::updateOrCreate(
            ['cnpj' => $request->cnpj],
            [
                'nome' => $request->razaosocial,
                'endereco' => json_decode($request->address, true),
            ]
        );

        if ($escola->wasRecentlyCreated) {

            // 🔥 Limpa cache ANTES
            app(PermissionRegistrar::class)->forgetCachedPermissions();

            // Define tenant (team)
            setPermissionsTeamId($escola->id);

            /*
            |--------------------------------------------------------------------------
            | ROLES (POR ESCOLA)
            |--------------------------------------------------------------------------
            */
            $roles = [
                'coordenacao',
                'secretaria',
                'responsavel',
                'aluno',
                'representante_de_turma',
            ];

            foreach ($roles as $r) {
                Role::firstOrCreate([
                    'name' => $r,
                    'guard_name' => 'web',
                    'id_escola' => $escola->id,
                ]);
            }

            /*
            |--------------------------------------------------------------------------
            | PERMISSIONS
            |--------------------------------------------------------------------------
            */
            $permissions = [
                // escolas
                'escolas.ver',
                'escolas.criar',
                'escolas.editar',
                'escolas.deletar',

                // turmas
                'turmas.ver',
                'turmas.detalhes',
                'turmas.criar',
                'turmas.editar',
                'turmas.deletar',

                // alunos
                'alunos.ver_todos',
                'alunos.ver_meus',
                'alunos.criar',
                'alunos.editar',
                'alunos.deletar',

                // whatsapp
                'wpp.enviar',
            ];

            foreach ($permissions as $p) {
                Permission::firstOrCreate([
                    'name' => $p,
                    'guard_name' => 'web',
                ]);
            }

            /*
            |--------------------------------------------------------------------------
            | MAPEAR ROLE -> PERMISSIONS (CORRIGIDO)
            |--------------------------------------------------------------------------
            */
            $rolePermissions = [

                // Coordenação: vê todos os alunos
                'coordenacao' => [
                    'turmas.ver',
                    'turmas.detalhes',
                    'turmas.criar',
                    'turmas.editar',
                    'turmas.deletar',

                    'alunos.ver_todos',
                    'alunos.criar',
                    'alunos.editar',
                    'alunos.deletar',

                    'wpp.enviar',
                ],

                // Secretaria: vê todos os alunos
                'secretaria' => [
                    'turmas.ver',
                    'turmas.detalhes',

                    'alunos.ver_todos',
                    'alunos.criar',
                    'alunos.editar',

                    'wpp.enviar',
                ],

                // Responsável: vê somente os "meus"
                'responsavel' => [
                    'alunos.ver_meus',
                ],

                // Aluno: vê somente os "meus"
                'aluno' => [
                    'alunos.ver_meus',
                ],

                // Representante: vê os "meus" + detalhes da turma (e wpp se você quiser)
                'representante_de_turma' => [
                    'alunos.ver_meus',
                    'turmas.detalhes',
                    'wpp.enviar',
                ],
            ];

            foreach ($rolePermissions as $roleName => $perms) {

                $role = Role::query()
                    ->where('name', $roleName)
                    ->where('guard_name', 'web')
                    ->where('id_escola', $escola->id)
                    ->firstOrFail();

                $role->syncPermissions($perms);
            }

            // 🔥 Limpa cache DEPOIS
            app(PermissionRegistrar::class)->forgetCachedPermissions();

            // opcional: volta contexto global
            setPermissionsTeamId(null);
        }

        DB::commit();

        return redirect()
            ->route('escolas')
            ->with('success', 'Escola Criada|Atualizada com sucesso');

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


}
