// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

/**
 * @title OfficialStableMirrorToken
 * @notice Lightweight ERC-20 used as the local Chain 138 "official" stable mirror.
 * @dev This token exists only to provide a live ERC-20 quote-side asset for local PMM pools.
 *      It is intentionally separate from the compliant token contracts.
 */
contract OfficialStableMirrorToken is ERC20, Ownable {
    uint8 private immutable _decimalsStorage;

    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_,
        address initialOwner,
        uint256 initialSupply
    ) ERC20(name_, symbol_) Ownable(initialOwner) {
        _decimalsStorage = decimals_;
        if (initialSupply > 0) {
            _mint(msg.sender, initialSupply);
        }
    }

    function decimals() public view override returns (uint8) {
        return _decimalsStorage;
    }

    function mint(address to, uint256 amount) external onlyOwner {
        _mint(to, amount);
    }

    function burn(address from, uint256 amount) external onlyOwner {
        _burn(from, amount);
    }
}
