contract BurgerKingApplication is Ownable, ERC721A, ReentrancyGuard {

  constructor(
    uint256 maxBatchSize_,
    uint256 collectionSize_,
    uint256 amountForAuctionAndDev_,
    uint256 amountForDevs_
  ) ERC721A("Burger King Application", "Burger King Application", maxBatchSize_, collectionSize_) {
    require(amountForAuctionAndDev_ <= collectionSize_, "larger collection size needed" );
  }
    
    uint256 pricePer = 0.01 ether;
    uint256 totalCost;


    /**
     * @dev Public sale mint
     * @param quantity Number of tokens to mint
     *
     * 
     * - First 550 are free. Next 551 cost 0.01 each.
     * - Gas optimized contract - very low gas fees.
     * - If you're reading this, you're gonnna need one of these applications soon
     */
  function mint(uint256 quantity) external payable {
    require(quantity <= 10, 'Cant mint more than 10');
    if (totalSupply() > 550){
        totalCost = quantity * pricePer;
    }
    if (totalSupply() <= 550){
        totalCost = 0;
    }
    require(totalSupply() + quantity <= 1111);
    require(msg.value >= totalCost, 'Not enough Eth sent');
    _safeMint(msg.sender, quantity);
  }

  // // metadata URI
  string private _baseTokenURI;

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

  function setBaseURI(string calldata baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }

  function withdrawMoney() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant {
    _setOwnersExplicit(quantity);
  }

  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }

  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }
}
function mint(uint256 quantity) external payable {
  require(quantity <= 10, 'Cant mint more than 10');
  if (totalSupply() > 550){
      totalCost = quantity * pricePer;
  }
  if (totalSupply() <= 550){
      totalCost = 0;
  }
  require(totalSupply() + quantity <= 1111);
  require(msg.value >= totalCost, 'Not enough Eth sent');
  _safeMint(msg.sender, quantity);
}

/**
 * @dev Public sale mint
 * @param quantity Number of tokens to mint
 *
 * 
 * - First 550 are free. Next 551 cost 0.01 each.
 * - Gas optimized contract - very low gas fees.
 * - If you're reading this, you're gonnna need one of these applications soon
 */