import { NextRequest, NextResponse } from 'next/server';
import { pool } from '@/backend/utils/db';
import { RowDataPacket } from 'mysql2';

interface AccountRow extends RowDataPacket {
  id: number;
  accountname: string;
  accountdetails: string;
  minBalance: number | null;
  minIncome: number | null;
  accounturl: string;
  accountimagename: string;
  bankname: string;
  accountType: string;
}

interface FeatureRow extends RowDataPacket {
  bankaccountfeatureDetails: string;
}

interface OfferRow extends RowDataPacket {
  bankaccountofferDetails: string;
}

export async function GET(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
  const { id } = await params;
  if (!id) return NextResponse.json({ error: 'Missing id' }, { status: 400 });

  const sql = `
    SELECT ba.idbankaccount as id, ba.accountname, ba.accountdetails, ba.MinimumBalance as minBalance, ba.MinimumIncome as minIncome,
           ba.accounturl, ba.accountimagename, b.bankname, at.accounttypedesc as accountType
    FROM bankaccounts ba
    JOIN banks b ON ba.idbank = b.idbanks
    JOIN accounttypes at ON ba.idaccounttype = at.idaccounttype
    WHERE ba.idbankaccount = ?
  `;
  const [results] = await pool.query<AccountRow[]>(sql, [id]);
  if (!results || results.length === 0) return NextResponse.json(null);
  const acc = results[0];
  const [features] = await pool.query<FeatureRow[]>(`SELECT bankaccountfeatureDetails FROM bankaccountfeatures WHERE idbankaccount = ?`, [id]);
  acc.features = features.map((f) => f.bankaccountfeatureDetails);
  const [offers] = await pool.query<OfferRow[]>(`SELECT bankaccountofferDetails FROM bankaccountoffers WHERE idbankaccount = ?`, [id]);
  acc.offers = offers.map((o) => o.bankaccountofferDetails);
  acc.bankLogo = `/banklogo/${acc.bankname.replace(/\s+/g, '_')}.webp`;
  return NextResponse.json(acc);
}
