import prisma from "~/server/utils/prisma";

export default defineEventHandler(async (event) => {
  try {
    const now = new Date();
    const last30Days = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);

    // Get all channel types
    const channelTypes = ['email', 'push', 'sms'];
    const channelPerformance = [];

    for (const channelType of channelTypes) {
      // Get stats for this channel
      const [totalSent, successful, failed, pending] = await Promise.all([
        prisma.notification_recipients.count({
          where: {
            channel_type: channelType,
            created_at: { gte: last30Days }
          }
        }),
        prisma.notification_recipients.count({
          where: {
            channel_type: channelType,
            status: 'sent',
            created_at: { gte: last30Days }
          }
        }),
        prisma.notification_recipients.count({
          where: {
            channel_type: channelType,
            status: 'failed',
            created_at: { gte: last30Days }
          }
        }),
        prisma.notification_recipients.count({
          where: {
            channel_type: channelType,
            status: 'pending',
            created_at: { gte: last30Days }
          }
        }),
      ]);

      const successRate = totalSent > 0
        ? ((successful / totalSent) * 100).toFixed(1)
        : 0;

      const failureRate = totalSent > 0
        ? ((failed / totalSent) * 100).toFixed(1)
        : 0;

      channelPerformance.push({
        channel: channelType,
        totalSent,
        successful,
        failed,
        pending,
        successRate: parseFloat(successRate),
        failureRate: parseFloat(failureRate),
      });
    }

    return {
      success: true,
      data: channelPerformance
    };
  } catch (error) {
    console.error("Error fetching channel performance:", error);
    throw createError({
      statusCode: 500,
      statusMessage: "Failed to fetch channel performance",
      data: { error: error.message },
    });
  } finally {
  }
});
