/**
 * HTTP layer for /admin/users/* (PLANNING.md §4b). Thin — rules live in
 * user.service.ts.
 */
import type { Request, Response } from 'express';
import { parseBody, parseQuery } from '../../lib/parseRequest';
import {
  changePasswordSchema,
  createUserSchema,
  listQuerySchema,
  updateUserSchema,
} from './user.schema';
import * as users from './user.service';

export async function list(req: Request, res: Response): Promise<void> {
  res.json(await users.list(parseQuery(listQuerySchema, req.query)));
}

export async function detail(req: Request, res: Response): Promise<void> {
  res.json({ user: await users.getById(req.params.id) });
}

export async function create(req: Request, res: Response): Promise<void> {
  const input = parseBody(createUserSchema, req.body);
  res.status(201).json({ user: await users.create(input, req.admin!.id) });
}

export async function patch(req: Request, res: Response): Promise<void> {
  const input = parseBody(updateUserSchema, req.body);
  res.json({ user: await users.update(req.params.id, input, req.admin!) });
}

export async function changePassword(req: Request, res: Response): Promise<void> {
  const body = parseBody(changePasswordSchema, req.body);
  await users.changePassword(req.params.id, req.admin!, body);
  res.json({ ok: true });
}
