contract ArtMinting is ArtOwnership {

    // Limits the number of art tokens the contract owner can ever create.
    uint256 public constant PROMO_CREATION_LIMIT = 300;

    // Counts the number of cats the contract owner has created.
    uint256 public promoCreatedCount;

    /// @dev we can create promo kittens, up to a limit. Only callable by COO
    function createPromoArt() external onlyCOO {
        // address artOwner = recipients[promoCreatedCount];
        // if (artOwner == address(0)) {
        //      artOwner = cooAddress;
        // }
        // address artOwner = cooAddress;
        require(promoCreatedCount < PROMO_CREATION_LIMIT);

        promoCreatedCount++;
        _createArt(curGenerator, cooAddress);
    }
    
    uint256[] public votes;
    uint16 public curGenerator = 0;
    uint16 public maxGenerators = 3;
    
    function castVote(uint _generator) external {
        require(_generator < votes.length);
        votes[_generator] = votes[_generator] + 1;
        if (votes[_generator] > votes[curGenerator]) {
            curGenerator = uint16(_generator);
        }
        Vote(uint16(_generator), votes[_generator], curGenerator, votes[curGenerator]);
    }
    
    function addGenerator() external {
        require(votes.length < maxGenerators);
        uint _id = votes.push(0);
        NewGenerator(_id);
    }
}
/// @title all functions related to creating art tokens
function createPromoArt() external onlyCOO {
        // address artOwner = recipients[promoCreatedCount];
        // if (artOwner == address(0)) {
        //      artOwner = cooAddress;
        // }
        // address artOwner = cooAddress;
        require(promoCreatedCount < PROMO_CREATION_LIMIT);

        promoCreatedCount++;
        _createArt(curGenerator, cooAddress);
    }
/// @dev we can create promo kittens, up to a limit. Only callable by COO