<?php

namespace App\Http\Controllers;

use App\Models\AuditLog;
use App\Models\Contrato;
use App\Models\Notificacao;
use Illuminate\Http\Request;

class AssinaturaController extends Controller
{
    public function show(string $token)
    {
        $contrato = Contrato::where('assinatura_token', $token)
            ->where('status_workflow', 'Aguardando assinatura cliente')
            ->firstOrFail();

        return view('pages.assinar', compact('contrato'));
    }

    public function store(Request $request, string $token)
    {
        $contrato = Contrato::where('assinatura_token', $token)
            ->where('status_workflow', 'Aguardando assinatura cliente')
            ->firstOrFail();

        $request->validate([
            'assinatura_dados' => 'required|string',
            'assinatura_nome'  => 'required|string|max:255',
        ]);

        $contrato->update([
            'assinatura_dados'  => $request->assinatura_dados,
            'assinatura_nome'   => $request->assinatura_nome,
            'assinatura_ip'     => $request->ip(),
            'assinado_em'       => now(),
            'status_workflow'   => 'Ativo',
            'ativo_em'          => now(),
        ]);

        AuditLog::record(
            'contrato.assinado',
            "Contrato assinado digitalmente por {$request->assinatura_nome} via {$request->ip()}",
            $contrato
        );

        Notificacao::notificarPermissao(
            'acessar_contratos',
            'Contrato assinado digitalmente',
            "{$contrato->razao_social} — assinado por {$request->assinatura_nome}",
            route('contratos.show', $contrato),
            'success'
        );

        return redirect()->route('assinar.confirmado', $token);
    }

    public function confirmado(string $token)
    {
        $contrato = Contrato::where('assinatura_token', $token)->firstOrFail();

        return view('pages.assinar-confirmado', compact('contrato'));
    }
}
