<?php

namespace App\Livewire\Concerns;

use App\Models\Customer;

/**
 * Resolves the customer behind the signed-in portal user.
 *
 * Operator accounts (admins) have no Customer, so customer-scoped actions must
 * NOT silently no-op — that reads as a dead button. requireCustomer() surfaces
 * an explicit message instead and returns null so the caller can bail.
 */
trait ResolvesCustomer
{
    protected function customer(): ?Customer
    {
        return Customer::forUser(auth()->user());
    }

    /** Same as customer(), but tells the user why nothing happened. */
    protected function requireCustomer(): ?Customer
    {
        $customer = $this->customer();

        if ($customer === null) {
            $this->dispatch('notify', message: __('dashboard.no_customer_action'));
        }

        return $customer;
    }
}
