<?php

namespace App\Filament\Resources\Expenses\Pages;

use App\Filament\Resources\Expenses\ExpenseResource;
use App\Models\Expense;
use Filament\Resources\Pages\CreateRecord;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;

class CreateExpenses extends CreateRecord
{
    protected static string $resource = ExpenseResource::class;

    protected function mutateFormDataBeforeCreate(array $data): array
    {
        $user = Auth::user();

        // 🔒 Company obligatoria
        if (empty($data['company_id']) && $user->company_id) {
            $data['company_id'] = $user->company_id;
        }

        // 🔒 User obligatorio
        $data['user_id'] = $user->id;

        return $data;
    }

    /**
     * La política de aprobación por rol se aplica con la fuente única de verdad
     * Expense::applyApprovalPolicyForCreator() — idéntica a la PWA
     * (ExpenseController + SyncController): admin/super_admin → auto-aprobado;
     * supervisor/collector → pendiente. Debe hacerse sobre el modelo (no sobre
     * el array) porque marca preApproved=true, que evita que el hook
     * checkApprovalRequirements reescriba la decisión por umbral/categoría — ese
     * era el bug: un admin podía quedar PENDING en categorías con umbral.
     */
    protected function handleRecordCreation(array $data): Model
    {
        /** @var Expense $expense */
        $expense = new (static::getModel())($data);
        $expense->applyApprovalPolicyForCreator(Auth::user());
        $expense->save();

        return $expense;
    }

    protected function getRedirectUrl(): string
    {
        return ExpenseResource::getUrl('view', ['record' => $this->record]);
    }
}
