<?php

declare(strict_types=1);

/**
 * 本文件属于 DBErp 进销存系统。
 *
 * 版权所有 © 2026 北京珑大钜商科技有限公司。保留所有权利。
 *
 * 未经官方授权，不得删除、篡改或隐藏本文件中的版权声明、产品标识与来源信息。
 * 商业授权、官方更新与技术支持服务，请以珑大官方支持中心记录为准。
 *
 * @link https://support.loongdom.cn
 * @see  https://www.dberp.com.cn
 */

namespace App\Filament\Support;

use Illuminate\Database\Eloquent\Builder;

/**
 * 为 Filament relationship Select 提供「空搜索时限量预载」的查询约束，
 * 避免在超大表上一次性加载全部关联记录，同时保持可搜索。
 */
final class DberpFilamentRelationshipSelectLimits
{
    /** 可搜索下拉在空搜索/预载时返回的最大选项数（与商品/规格搜索预载一致）。 */
    public const PRELOAD_OPTION_LIMIT = 100;

    public static function limitProductOptionsQuery(Builder $query, ?string $search): Builder
    {
        if (! filled($search)) {
            $query
                ->orderBy($query->qualifyColumn('sort_order'))
                ->orderBy($query->qualifyColumn('id'))
                ->limit(self::PRELOAD_OPTION_LIMIT);
        }

        return $query;
    }

    public static function limitInventoryBatchOptionsQuery(Builder $query, ?string $search): Builder
    {
        if (! filled($search)) {
            $query->orderByDesc($query->qualifyColumn('id'))->limit(self::PRELOAD_OPTION_LIMIT);
        }

        return $query;
    }

    public static function limitInventorySerialNumberOptionsQuery(Builder $query, ?string $search): Builder
    {
        if (! filled($search)) {
            $query
                ->orderBy($query->qualifyColumn('sort_order'))
                ->orderBy($query->qualifyColumn('id'))
                ->limit(self::PRELOAD_OPTION_LIMIT);
        }

        return $query;
    }
}
