<?php

namespace Dalten\RuianToUir\Converter\Field;

class GeometryField
{
    /** @var string String vhodný pro použití v MySQL funkci ST_GeomFromText(...) */
    private readonly string $wkt;

    /**
     * GeometryField constructor.
     *
     * @param string                                $type   typ prvku
     * @param list<array{lat: scalar, lng: scalar}> $coords Pole souřadnic v GPS. [['lat' => 0, 'lng' => 0], ...]
     */
    public function __construct(private readonly string $type, array $coords)
    {
        $this->wkt = $this->buildWKT($coords);
    }

    /**
     * Vrátí WKT vhodný pro SQL INSERT.
     *
     * @return string
     */
    public function getWKT(): string
    {
        return $this->wkt;
    }

    /**
     * Získá typ geometrie.
     *
     * @return string
     */
    protected function getType(): string
    {
        return $this->type;
    }

    /**
     * Vytvoří SQL INSERT ve WKT formátu pro geometrii.
     *
     * Vrací string ve WKT formátu geometrie
     *
     * @param list<array{lat:scalar, lng:scalar}> $coords Pole souřadnic v GPS. [['lat' => 0, 'lng' => 0], ...]
     *
     * @return string
     */
    protected function buildWKT(array $coords): string
    {
        // $wkt je string, který bude fungovat, jako output
        $wkt = '';

        if (!empty($coords)) {
            $lastElement = \count($coords);
            $count = 0;
            $wkt = $this->getType();
            $wkt .= '(';

            foreach ($coords as $coord) {
                if (++$count === $lastElement) {
                    $wkt .= $coord['lat'].' '.$coord['lng'];
                } else {
                    $wkt .= $coord['lat'].' '.$coord['lng'].', ';
                }
            }

            $wkt .= ')';
        }

        return $wkt;
    }
}
