To implement an NFT staking contract, you'll need a staking token, data structures to track stakes, functions to create and remove stakes, and a reward.
Storing NFT metadata on-chain is very expensive and nonsensical in most situations. Here's how to create an NFT contract factory with off-chain metadata.