<?php

namespace Stringy;

if (!\function_exists('Stringy\create')) {
    /**
     * Creates a Stringy object and returns it on success.
     *
     * @param object|scalar $str      Value to modify, after being cast to string
     * @param string        $encoding The character encoding
     *
     * @throws \InvalidArgumentException if an array or object without a
     *                                   __toString method is passed as the first argument
     *
     * @return Stringy A Stringy object
     */
    function create($str, string $encoding = null)
    {
        return new Stringy($str, $encoding);
    }
}

if (!\function_exists('Stringy\collection')) {
    /**
     * @param string[]|Stringy[]|null $input
     *
     * @throws \TypeError
     *
     * @return CollectionStringy<int,Stringy>
     */
    function collection($input = null)
    {
        // init
        $newCollection = new CollectionStringy();

        if ($input === null) {
            return $newCollection;
        }

        /**
         * @psalm-suppress DocblockTypeContradiction
         */
        if (!\is_array($input)) {
            $input = [$input];
        }

        foreach ($input as &$stringOrStringy) {
            if (\is_string($stringOrStringy)) {
                $stringOrStringy = new Stringy($stringOrStringy);
            }
            assert($stringOrStringy instanceof Stringy);

            /** @phpstan-ignore-next-line - FP? */
            $newCollection[] = $stringOrStringy;
        }

        return $newCollection;
    }
}
