<?php

namespace Shm\ShmRPC\ShmRPCCodeGen\CodeGenPhp;

use Nette\PhpGenerator\PhpFile;
use Shm\ShmTypes\EnumType;

class CreateEnum
{

    private string $namespace = '';
    private string $dirFiles = '';
    private string $className = '';
    public function __construct(string $namespace, string $dirFiles, string $className)
    {
        $this->namespace = $namespace;
        $this->dirFiles = $dirFiles;
        $this->className = $className;
        //Создаем папку если не существует
        if (!is_dir($this->dirFiles)) {
            mkdir($this->dirFiles, 0777, true);
        }
    }



    public function create(EnumType $enumField)
    {
        $file = new PhpFile();
        $file->setStrictTypes();

        $allKeys = array_keys($enumField->values);
        //сортируем по ключу
        sort($allKeys);
        //Оставляем только первую букву
        $allKeys = array_map(function ($key) {
            return ucfirst($key[0]);
        }, $allKeys);
        //Убираем дубликаты
        $allKeys = array_unique($allKeys);
        //Собираем имя enum
        $enumName = implode('', $allKeys) . 'Enum';


        $namespace = $file->addNamespace($this->namespace);

        $enum = $namespace->addEnum($enumName);

        foreach ($enumField->values as $key => $value) {
            $enum->addCase($key);
        }

        $output = $file;

        $filePath = $this->dirFiles . $enumName . '.php';
        file_put_contents($filePath, $output);

        return $enumName;
    }
}