import { FastifyInstance } from 'fastify';
import { Pool } from 'pg';

export function notificationsRoutes(fastify: FastifyInstance, pool: Pool) {

  // GET /api/admin/notifications
  // Returns pending counts for bell icon
  fastify.get('/admin/notifications', async (req) => {
    const [ordersRows] = await Promise.all([
      pool.query<{ pending: string; shipped_24h: string; awaiting_payment: string }>(`
        SELECT
          COUNT(*) FILTER (WHERE state = 'PENDING') AS pending,
          COUNT(*) FILTER (
            WHERE state = 'SHIPPED'
              AND updated_at < NOW() - INTERVAL '24 hours'
          ) AS shipped_24h,
          COUNT(*) FILTER (
            WHERE state = 'AWAITING_PAYMENT'
              AND state = 'PENDING'
          ) AS awaiting_payment
        FROM pos_orders
        WHERE deleted_at IS NULL
          AND created_at > NOW() - INTERVAL '30 days'
      `),
    ]);

    const row = ordersRows.rows[0];
    const items = [];

    const pending = parseInt(row?.pending ?? '0', 10);
    if (pending > 0) {
      items.push({
        id: 'pending_orders',
        type: 'pending_orders',
        count: pending,
        message: 'Pedidos pendientes de procesar',
        href: '/orders?state=PENDING',
      });
    }

    const shipped24h = parseInt(row?.shipped_24h ?? '0', 10);
    if (shipped24h > 0) {
      items.push({
        id: 'stale_shipped',
        type: 'stale_shipped',
        count: shipped24h,
        message: 'Enviados sin actualizar en +24h',
        href: '/orders?state=SHIPPED&stale=true',
      });
    }

    const awaiting = parseInt(row?.awaiting_payment ?? '0', 10);
    if (awaiting > 0) {
      items.push({
        id: 'awaiting_payment',
        type: 'awaiting_payment',
        count: awaiting,
        message: 'Esperando confirmación de pago',
        href: '/orders?payment_status=AWAITING',
      });
    }

    return { items };
  });
}
