import { NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { getSessionUser } from '@/lib/auth'
import { publicOrigin } from '@/lib/app-url'
import { loadRule, ruleOperation, toViews } from '@/lib/data/auto-participant-rules'

const schema = z.object({
  op: z.enum(['disable', 'reactivate', 'remove', 'cancel', 'resend', 'change_scope']),
  scope_type: z.string().optional().nullable(),
})

/** Manage one of MY personal rules (Task 6.3). Company rules go through /api/company/auto-participants. */
export async function POST(req: NextRequest, ctx: { params: Promise<{ ruleId: string }> }) {
  const user = await getSessionUser()
  if (!user) return NextResponse.json({ error: 'Sign in first.' }, { status: 401 })
  const { ruleId } = await ctx.params
  const parsed = schema.safeParse(await req.json().catch(() => ({})))
  if (!parsed.success) return NextResponse.json({ error: 'Unknown operation.' }, { status: 400 })
  const rule = await loadRule(ruleId)
  if (!rule || rule.rule_type !== 'personal' || rule.owner_user_id !== user.id) {
    return NextResponse.json({ error: 'Rule not found.' }, { status: 404 })
  }
  const res = await ruleOperation({ actor: user, rule, op: parsed.data.op, scope_type: parsed.data.scope_type, ownerName: user.name || user.email, origin: publicOrigin(req) })
  if (!res.ok) return NextResponse.json({ error: res.error }, { status: res.status ?? 400 })
  const [view] = await toViews([res.rule])
  return NextResponse.json({ ok: true, rule: view })
}
