<?php
// MariaDBCharacterSetInfo.php
// Created: 2021-05-02
// Updated: 2024-08-03

namespace Index\Data\MariaDB;

/**
 * Contains information about the character set.
 *
 * @see https://www.php.net/manual/en/mysqli.get-charset
 */
class MariaDBCharacterSetInfo {
    /**
     * Creates a new character set info instance.
     *
     * @param object $charSet Anonymous object containing the information.
     * @return MariaDBCharacterSetInfo Character set information class.
     */
    public function __construct(
        private object $charSet
    ) {}

    /**
     * Returns the name of the current character set.
     *
     * @return string Character set name.
     */
    public function getCharacterSet(): string {
        return $this->charSet->charset ?? '';
    }

    /**
     * Returns the name of the default collation.
     *
     * @return string Default collation name.
     */
    public function getDefaultCollation(): string {
        return $this->charSet->collation ?? '';
    }

    /**
     * Returns the path to the directory the charcter was read from.
     * May be empty for built-in character sets.
     *
     * @return string Source directory.
     */
    public function getDirectory(): string {
        return $this->charSet->dir ?? '';
    }

    /**
     * Returns the minimum character width in bytes for this character set.
     *
     * @return int Minimum character width in bytes.
     */
    public function getMinimumWidth(): int {
        return $this->charSet->min_length ?? 0;
    }

    /**
     * Returns the maximum character width in bytes for this character set.
     *
     * @return int Maximum character width in bytes.
     */
    public function getMaximumWidth(): int {
        return $this->charSet->max_length ?? 0;
    }

    /**
     * Returns the internal numeric identifier for this character set.
     *
     * @return int Character set identifier.
     */
    public function getId(): int {
        return $this->charSet->number ?? 0;
    }

    /**
     * Returns the character set status.
     *
     * Whatever that means. Given the (?) in the official documentation, not even they know.
     *
     * @return int Character set status.
     */
    public function getState(): int {
        return $this->charSet->state ?? 0;
    }
}