import Member from '../../models/member.js'
import Event from '../../models/event.js'
import { connectDB } from '../../utils/mongoose.js'
import { requireAdmin } from '../../utils/auth.js'

export default defineEventHandler(async (event) => {
  try {
    await requireAdmin(event)
    await connectDB()

    // Get stats
    const totalMembers = await Member.countDocuments()
    const now = new Date()
    const activeEvents = await Event.countDocuments({
      startDate: { $lte: now },
      endDate: { $gte: now }
    })

    // Calculate monthly revenue from member contributions
    const members = await Member.find({}, 'contributionTier').lean()
    const monthlyRevenue = members.reduce((total, member) => {
      return total + parseInt(member.contributionTier || '0')
    }, 0)

    const pendingSlackInvites = await Member.countDocuments({ slackInvited: false })

    // Get recent members (last 5)
    const recentMembers = await Member.find()
      .sort({ createdAt: -1 })
      .limit(5)
      .lean()

    // Get upcoming events (next 5)
    const upcomingEvents = await Event.find({
      startDate: { $gte: now }
    })
      .sort({ startDate: 1 })
      .limit(5)
      .lean()

    return {
      stats: {
        totalMembers,
        activeEvents,
        monthlyRevenue,
        pendingSlackInvites
      },
      recentMembers,
      upcomingEvents
    }
  } catch (error) {
    if (error.statusCode) throw error
    throw createError({
      statusCode: 500,
      statusMessage: 'Failed to fetch dashboard data'
    })
  }
})
