import type { RowDataPacket, ResultSetHeader } from 'mysql2'
import { db, DB } from './db'

export interface NewsItem {
  id: number
  titulo: string
  tituloEn: string
  contenido: string
  contenidoEn: string
  fecha: string | null
  enlace: string | null
}

export async function listNews(): Promise<NewsItem[]> {
  const [rows] = await db(DB.default).query<RowDataPacket[]>(
    'SELECT id, titulo, titulo_en, contenido, contenido_en, fecha_publicacion, enlace FROM noticia ORDER BY fecha_publicacion DESC',
  )
  return rows.map((r) => ({
    id: r.id,
    titulo: r.titulo,
    tituloEn: r.titulo_en || '',
    contenido: r.contenido,
    contenidoEn: r.contenido_en || '',
    fecha: r.fecha_publicacion ? new Date(r.fecha_publicacion).toISOString() : null,
    enlace: r.enlace || null,
  }))
}

export async function createNews(
  titulo: string,
  contenido: string,
  enlace: string | null,
  tituloEn: string | null,
  contenidoEn: string | null,
): Promise<number> {
  const [res] = await db(DB.default).query<ResultSetHeader>(
    'INSERT INTO noticia (titulo, titulo_en, contenido, contenido_en, fecha_publicacion, enlace) VALUES (?, ?, ?, ?, NOW(), ?)',
    [titulo, tituloEn || null, contenido, contenidoEn || null, enlace || null],
  )
  return res.insertId
}

/** Actualiza una noticia (incluye la traducción al inglés). */
export async function updateNews(
  id: number,
  titulo: string,
  contenido: string,
  enlace: string | null,
  tituloEn: string | null,
  contenidoEn: string | null,
): Promise<void> {
  await db(DB.default).query(
    'UPDATE noticia SET titulo = ?, titulo_en = ?, contenido = ?, contenido_en = ?, enlace = ? WHERE id = ?',
    [titulo, tituloEn || null, contenido, contenidoEn || null, enlace || null, id],
  )
}

export async function deleteNews(id: number): Promise<void> {
  await db(DB.default).query('DELETE FROM noticia WHERE id = ?', [id])
}
