import type { RowDataPacket } from "mysql2/promise";
import { pool } from "../db/mysql.js";

/** Cache de preço spot (`spot_prices`). */

export interface SpotRow extends RowDataPacket {
  symbol: string;
  price: string;
  fetched_at: Date;
}

export async function upsertSpot(symbol: string, price: string): Promise<void> {
  await pool.query(
    `INSERT INTO spot_prices (symbol, price, fetched_at)
     VALUES (:symbol, :price, NOW())
     ON DUPLICATE KEY UPDATE price = VALUES(price), fetched_at = NOW()`,
    { symbol, price },
  );
}

export async function getSpot(symbol: string): Promise<SpotRow | null> {
  const [rows] = await pool.query<SpotRow[]>(
    `SELECT * FROM spot_prices WHERE symbol = :symbol`,
    { symbol },
  );
  return rows[0] ?? null;
}

export async function listSpot(): Promise<SpotRow[]> {
  const [rows] = await pool.query<SpotRow[]>(`SELECT * FROM spot_prices ORDER BY symbol`);
  return rows;
}
