<?php

namespace Pterodactyl\Transformers\Api\Client;

use BadMethodCallException;
use InvalidArgumentException;
use Pterodactyl\Models\EggVariable;

class EggVariableTransformer extends BaseClientTransformer
{
    /**
     * @return string
     */
    public function getResourceName(): string
    {
        return EggVariable::RESOURCE_NAME;
    }

    /**
     * @param \Pterodactyl\Models\EggVariable $variable
     * @return array
     */
    public function transform(EggVariable $variable)
    {
        // This guards against someone incorrectly retrieving variables (haha, me) and then passing
        // them into the transformer and along to the user. Just throw an exception and break the entire
        // pathway since you should never be exposing these types of variables to a client.
        if (!$variable->user_viewable) {
            throw new BadMethodCallException(
                'Cannot transform a hidden egg variable in a client transformer.'
            );
        }

        return [
            'name' => $variable->name,
            'description' => $variable->description,
            'env_variable' => $variable->env_variable,
            'default_value' => $variable->default_value,
            'server_value' => $variable->server_value,
            'is_editable' => $variable->user_editable,
            'rules' => $variable->rules,
        ];
    }
}
