<?php

namespace App\Filament\Traits;

use Filament\Forms\Components\Select;
use Filament\Tables\Filters\SelectFilter;
use Illuminate\Database\Eloquent\Builder;

trait MultiTenantResource
{
    /**
     * Filtra automáticamente todas las queries por company_id,
     * excepto para super admin.
     */
    public static function getEloquentQuery(): Builder
    {
        $query = parent::getEloquentQuery();
        $user = auth()->user();

        if (method_exists($user, 'isSuperAdmin') && ! $user->isSuperAdmin()) {
            $query->where('company_id', $user->company_id);
        }

        return $query;
    }

    /**
     * Campo company_id universal para formularios.
     */
    public static function companyFormField(): Select
    {
        return Select::make('company_id')
            ->label('Compañía')
            ->relationship('company', 'name')
            ->default(fn () => auth()->user()->company_id)
            ->visible(fn () => auth()->user()->isSuperAdmin())
            ->required();
    }

    /**
     * Filtro por compañía universal para List pages.
     */
    public static function companyTableFilter(): SelectFilter
    {
        return SelectFilter::make('company_id')
            ->relationship('company', 'name')
            ->visible(fn () => auth()->user()->isSuperAdmin());
    }
}
