import { NextRequest, NextResponse } from 'next/server';
import { typedQuery } from '@/backend/utils/typedQuery';

interface LoanDetail {
  label: string;
  value: string;
}

interface Loan {
  id: number;
  name: string;
  bankname: string;
  logo: string;
  image: string;
  loanurl: string;
  details: LoanDetail[];
  benefits: string[];
  bankloandetails: BankLoanDetailRow[];
}

interface LoanRow {
  id: number;
  name: string;
  bankname: string;
  logo: string;
  image: string;
  loanurl: string;
  minIncome: string;
  annualFee: string;
  flatInterestRate: string;
  reducingInterestRate: string;
}

interface BenefitRow {
  benefit: string;
}

interface BankLoanDetailRow {
  benefitid: number;
  benefitdetails: string;
  benefitcategory: string;
}

// Optional: force Node.js runtime to avoid Edge behavior
export const runtime = 'nodejs';

export async function GET(
  req: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  const vparams = await params;
  const loanurl = vparams.id;

  console.log('[INFO] Fetching loan details for URL:', loanurl);

  try {
    // Fetch main loan info
    const [loans] = await typedQuery<LoanRow>(
      `
      SELECT DISTINCT
        ld.idloan AS id,
        ld.loanname AS name,
        b.bankname AS bankname,
        b.banklogo AS logo,
        CONCAT('/banklogo/', b.banklogo) AS image,
        ld.loanurl,
        ld.MinimumIncome AS minIncome,
        ld.AnnualFee AS annualFee,
        ld.FlatInterestRate AS flatInterestRate,
        ld.ReducingInterestRate AS reducingInterestRate
      FROM loansdetails ld
      INNER JOIN banks b ON ld.idbank = b.idbanks
      WHERE ld.loanurl = ?
      `,
      [loanurl]
    );

    if (loans.length === 0) {
      return NextResponse.json({ error: 'Loan not found' }, { status: 404 });
    }

    const loan = loans[0];
    console.log('[INFO] Loan found:', loan.id, loan.name);

    // Fetch feature benefits
    const [benefitsRows] = await typedQuery<BenefitRow>(
      `
      SELECT loanshortfeature AS benefit
      FROM loanfeatures
      WHERE idloan = ?
      `,
      [loan.id]
    );

    const benefits = benefitsRows.map((row) => row.benefit);
    console.log('[INFO] Benefits fetched:', benefits.length);

    // Fetch detailed benefits/features
    const [loanDetailsRows] = await typedQuery<BankLoanDetailRow>(
      `
      SELECT
        idloanbenefit AS benefitid,
        loanbenefitDetails AS benefitdetails,
        loanbenefitCategory AS benefitcategory
      FROM loanbenefits
      WHERE idloan = ?
      `,
      [loan.id]
    );

    const bankloandetails = loanDetailsRows;
    console.log('[INFO] Loan benefits fetched:', bankloandetails.length);

    // Loan summary details
    const details: LoanDetail[] = [
      { label: 'Minimum Income', value: loan.minIncome || 'N/A' },
      { label: 'Fixed Rate', value: loan.flatInterestRate || 'N/A' },
      { label: 'Reducing Rate', value: loan.reducingInterestRate || 'N/A' },
    ];

    const response: Loan = {
      id: loan.id,
      name: loan.name,
      bankname: loan.bankname,
      logo: loan.logo,
      image: loan.image,
      loanurl: loan.loanurl,
      details,
      benefits,
      bankloandetails,
    };

    console.log('[INFO] Loan details fetched successfully for ID:', loan.id);
    return NextResponse.json(response);
  } catch (error) {
    const errorMessage = error instanceof Error ? error.message : String(error);
    console.error('[ERROR] Error fetching loan details:', errorMessage);
    console.error('[ERROR] Full error details:', error);
    return NextResponse.json(
      { error: 'Internal server error', details: errorMessage },
      { status: 500 }
    );
  }
}
