contract NyxGenesisCollection is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable {
    using Counters for Counters.Counter;
    string public baseURI;

    Counters.Counter private _tokenIdCounter;

    constructor(uint256 amount, string memory uri, address _mintDestination) ERC721("NYXG", "Nyx Genesis Collection") {
        /** set base uri */
        baseURI = uri;

        for (uint i = 0; i < amount; i++) {
            safeMint(_mintDestination, Strings.toString(i));
        }
    }

    function continueMint(uint256 amount, address _mintDestination) public onlyOwner{
        for (uint i = 0; i < amount; i++) {
            safeMint(_mintDestination, Strings.toString(i));
        }
    }

    function _baseURI() override internal view virtual returns (string memory) {
        return baseURI;
    }

    function _changeBaseURI(string memory uri) public onlyOwner {
        baseURI = uri;
    }

    function safeMint(address to, string memory uri) public onlyOwner {
        uint256 tokenId = _tokenIdCounter.current();
        _tokenIdCounter.increment();
        _safeMint(to, tokenId);
        _setTokenURI(tokenId, uri);
    }

    // The following functions are overrides required by Solidity.

    function _beforeTokenTransfer(address from, address to, uint256 tokenId)
        internal
        override(ERC721, ERC721Enumerable)
    {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
}
function _beforeTokenTransfer(address from, address to, uint256 tokenId)
    internal
    override(ERC721, ERC721Enumerable)
{
    super._beforeTokenTransfer(from, to, tokenId);
}

// The following functions are overrides required by Solidity.