import Redis from "ioredis"; // Redis
import type { NextApiRequest, NextApiResponse } from "next";

/**
 * Temporary work-around for not having an OpenSea API key
 * Literally, store metadata in Redis on creation :(
 */
const metadata = async (req: NextApiRequest, res: NextApiResponse) => {
  // Collect required parameters
  const { name, description, imageURL, tokenAddress, tokenId } = req.body;

  // Enforce required parameters
  if (!name || !description || !imageURL || !tokenAddress || !tokenId) {
    res.status(502).send({ error: "Missing parameters" });
  }

  // Setup redis and data structure
  const client = new Redis(process.env.REDIS_URL);
  let existingData = await client.get("metadata");
  let newData: Record<string, Record<string, string>> = {};

  // If data exists
  if (existingData) {
    // Parse and replace structure
    newData = JSON.parse(existingData);
  }

  // Update structure with new metadata
  newData[`${tokenAddress.toLowerCase()}-${tokenId.toString()}`] = {
    name,
    description,
    imageURL,
  };

  // Save metadata and return
  await client.set("metadata", JSON.stringify(newData));
  res.status(200).send({ success: true });
};

export default metadata;