interface IMedia {
    struct EIP712Signature {
        uint256 deadline;
        uint8 v;
        bytes32 r;
        bytes32 s;
    }

    struct MediaData {
        // A valid URI of the content represented by this token
        string tokenURI;
        // A SHA256 hash of the content pointed to by tokenURI
        bytes32 contentHash;
    }

    event TokenURIUpdated(uint256 indexed _tokenId, address owner, string _uri);

    /**
     * @notice Mint new media for msg.sender.
     */
    //function mint(MediaData calldata data, IMarket.BidShares calldata bidShares) external;
    function mint(uint256 tokenId, MediaData calldata data) external;

    /**
     * @notice Mint new media for creator.
     */
    //function mintForCreator(address creator, MediaData calldata data, IMarket.BidShares calldata bidShares) external;
    function mintForCreator(address creator, uint256 tokenId, MediaData calldata data) external;

    /**
     * @notice EIP-712 mintWithSig method. Mints new media for a creator given a valid signature.
     */
    //function mintWithSig(address creator, MediaData calldata data, IMarket.BidShares calldata bidShares, EIP712Signature calldata sig) external;
    function mintWithSig(address creator, uint256 tokenId, MediaData calldata data, EIP712Signature calldata sig) external;

    /**
     * @notice Transfer the token with the given ID to a given address.
     * Save the previous owner before the transfer, in case there is a sell-on fee.
     * @dev This can only be called by the auction contract specified at deployment
     */
    //function auctionTransfer(uint256 tokenId, address recipient) external;

    /**
     * @notice Set the ask on a piece of media
     */
    //function setAsk(uint256 tokenId, IMarket.Ask calldata ask) external;

    /**
     * @notice Remove the ask on a piece of media
     */
    //function removeAsk(uint256 tokenId) external;

    /**
     * @notice Set the bid on a piece of media
     */
    //function setBid(uint256 tokenId, IMarket.Bid calldata bid) external;

    /**
     * @notice Remove the bid on a piece of media
     */
    //function removeBid(uint256 tokenId) external;

    //function acceptBid(uint256 tokenId, IMarket.Bid calldata bid) external;

    /**
     * @notice Revoke approval for a piece of media
     */
    function revokeApproval(uint256 tokenId) external;

    /**
     * @notice Update the token URI
     */
    function updateTokenURI(uint256 tokenId, string calldata tokenURI) external;

    /**
     * @notice EIP-712 permit method. Sets an approved spender given a valid signature.
     */
    function permit(address spender, uint256 tokenId, EIP712Signature calldata sig) external;
}
/**
 * @title Interface for Pxbee Protocol's Media
 */
function mintWithSig(address creator, uint256 tokenId, MediaData calldata data, EIP712Signature calldata sig) external;

//function mintWithSig(address creator, MediaData calldata data, IMarket.BidShares calldata bidShares, EIP712Signature calldata sig) external;