import { type ResultSetHeader, type RowDataPacket } from "mysql2"
import pool from '../miscellaneous/db'

interface UserD extends RowDataPacket {
  name?: string;
  value?: string;
}

export enum values {
  pass = 1,
  omdb_key,
  twitch_client_id,
  twitch_client_secret,
}

const namesOfValues: string[] = ["", "pass", "omdb_key", "twitch_client_id", "twitch_client_secret"];

async function getValue(name: values): Promise<string | undefined> {
  try {
    const [rows, fields] = await pool.query<UserD[]>("SELECT name, value FROM userData where id = ?;", [name]);
    if (rows.length > 0)
      return rows[0].value;
  }
  catch (err) {
    console.log(err);
  }
  return;
}

async function updateValue(name: string, value: string): Promise<number> {
  try {
    const [result, fields] = await pool.query<ResultSetHeader>("UPDATE userData SET value = ? WHERE name = ?", [value, name]);
    return result.affectedRows;
  }
  catch (err) {
    console.log(err);
  }
  return 0;
}

async function getAll(): Promise<UserD[]> {
  try {
    const [rows, fields] = await pool.query<UserD[]>("SELECT name, value FROM userData;");
    return rows;
  }
  catch (err) {
    console.log(err);
  }
  return [];
}

export default {
  getValue,
  updateValue,
  getAll,
  namesOfValues
};