// Refresh the authenticated member's cached nextBillingDate from Helcim.
// The account page calls this only when the stored date is stale (missing,
// past, or within ~24h). On success, writes the fresh date back to the member
// record so subsequent loads can render instantly from /api/auth/member.
//
// On Helcim errors, returns { subscription: null, error: 'unavailable' } (HTTP 200)
// so the client can fall back to the cached value (if any) without crashing.
import { requireAuth } from '../../utils/auth.js'
import { getHelcimSubscription } from '../../utils/helcim.js'
import Member from '../../models/member.js'
import { connectDB } from '../../utils/mongoose.js'

export default defineEventHandler(async (event) => {
  const member = await requireAuth(event)

  if (!member.helcimSubscriptionId) {
    return { subscription: null }
  }

  try {
    const response = await getHelcimSubscription(member.helcimSubscriptionId)
    const data = response?.data
    const subscription = Array.isArray(data)
      ? data[0]
      : (data && typeof data === 'object' ? data : response)

    // Helcim's GET /subscriptions/:id returns `dateBilling` (YYYY-MM-DD).
    // POST /subscriptions responses have sometimes been seen with `nextBillingDate`;
    // accept both so the refresh works regardless of shape.
    const nextBillingDate = subscription?.dateBilling || subscription?.nextBillingDate || null

    if (nextBillingDate) {
      const parsed = new Date(nextBillingDate)
      if (!Number.isNaN(parsed.getTime())) {
        await connectDB()
        await Member.findByIdAndUpdate(
          member._id,
          { $set: { nextBillingDate: parsed } },
          { runValidators: false }
        )
      }
    }

    return {
      subscription: subscription
        ? {
            id: String(subscription.id ?? ''),
            status: subscription.status || '',
            nextBillingDate: nextBillingDate || '',
          }
        : null,
    }
  } catch (error) {
    console.error('[subscription.get] Helcim lookup failed', {
      helcimSubscriptionId: member.helcimSubscriptionId,
      error: error?.message || error,
    })
    return { subscription: null, error: 'unavailable' }
  }
})
