<?php

declare(strict_types=1);

/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2018 Spomky-Labs
 *
 * This software may be modified and distributed under the terms
 * of the MIT license.  See the LICENSE file for details.
 */

namespace CBOR\OtherObject;

use CBOR\OtherObject as Base;
use InvalidArgumentException;

final class SimpleObject extends Base
{
    public static function supportedAdditionalInformation(): array
    {
        return [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 24];
    }

    public static function createFromLoadedData(int $additionalInformation, ?string $data): Base
    {
        return new self($additionalInformation, $data);
    }

    public function getNormalizedData(bool $ignoreTags = false)
    {
        if (null === $this->data) {
            return $this->getAdditionalInformation();
        }

        return gmp_intval(gmp_init(bin2hex($this->data), 16));
    }

    /**
     * @return SimpleObject
     */
    public static function create(int $value): self
    {
        switch (true) {
            case $value < 24:
                return new self($value, null);
            case $value < 256:
                return new self(24, \chr($value));
            default:
                throw new InvalidArgumentException('The value is not a valid simple value');
        }
    }
}
