/**
 * GET /api/admin/users/leads/followups?date=YYYY-MM-DD
 * Leads whose FollowUpDate is due: today (the given local date) or earlier (overdue),
 * active sales/vendor leads that are not Expired / Recycled. Dashboard "Wiedervorlagen"
 * card. Bounded ($top 60), oldest follow-up first.
 */
import { string } from 'alga-js'
import refreshTokenHelper from '../../../../utils/refreshTokenHelper'
import errorHandlingHelper from '../../../../utils/errorHandlingHelper'

const handleFunc = async (event: any, authToken: any = null) => {
  const token = authToken ?? await getTokenHelper(event)
  const q = getQuery(event)
  const today = /^\d{4}-\d{2}-\d{2}$/.test(String(q.date || '')) ? String(q.date) : new Date().toISOString().slice(0, 10)
  const filter = `FollowUpDate le '${today}' AND IsActive eq true AND (isSalesLead eq true OR isVendorLead eq true)`
  const res: any = await event.context.fetch(
    `models/ad_user?$filter=${string.urlEncode(filter)}&$orderby=${string.urlEncode('FollowUpDate asc')}&$top=60`,
    'GET', token, null
  )
  const records = (res?.records ?? [])
    .filter((r: any) => !['E', 'R'].includes(String(r?.LeadStatus?.id || '')))
    .map((r: any) => {
      const due = String(r.FollowUpDate || '').slice(0, 10)
      const diff = Math.round((Date.parse(due) - Date.parse(today)) / 86400000)
      return {
        id: r.id,
        name: r.Name || '',
        companyname: r.companyname || '',
        phone: r.Phone || '',
        eMail: r.EMail || '',
        followUpDate: due,
        followUpNote: r.FollowUpNote || '',
        leadRating: Number(r.LeadRating) || 0,
        overdueDays: diff < 0 ? Math.abs(diff) : 0
      }
    })
  return { today, records, todayCount: records.filter((r: any) => r.overdueDays === 0).length, overdueCount: records.filter((r: any) => r.overdueDays > 0).length }
}

export default defineEventHandler(async (event) => {
  let firstError: any = null
  try { return await handleFunc(event) } catch (err: any) { firstError = err }
  try { return await handleFunc(event, await refreshTokenHelper(event)) } catch (error: any) {
    return errorHandlingHelper(firstError?.data ?? firstError, error?.data ?? error)
  }
})
