<?php

declare(strict_types=1);

namespace App\Framework\Database\Criteria\Expression;

use App\Framework\Database\Criteria\Criterion;

/**
 * IN expression for matching against multiple values
 */
final readonly class InExpression implements Criterion
{
    public function __construct(
        public string $property,
        public array  $values
    ) {
    }

    public function toSql(): string
    {
        if (empty($this->values)) {
            return '1=0'; // Always false
        }

        $placeholders = str_repeat('?,', count($this->values) - 1) . '?';

        return "{$this->property} IN ({$placeholders})";
    }

    public function getParameters(): array
    {
        return $this->values;
    }
}
