/**
 * 用户管理和操作日志 API
 */

import { api } from '@/api/request';

// ── 用户管理 ──

/** 用户信息 */
export interface User {
  id: number;
  phone: string;
  name: string | null;
  role: number;
  role_text: string;
  organization_id: number | null;
  organization_name: string | null;
  status: number;
  created_at: string;
}

/** 用户列表响应 */
export interface UserListData {
  list: User[];
  total: number;
}

/** 创建用户参数 */
export interface CreateUserParams {
  phone: string;
  name?: string;
  role?: number;
  organization_id?: number | null;
  password?: string;
}

/** 编辑用户参数 */
export interface UpdateUserParams {
  name?: string;
  role?: number;
  organization_id?: number | null;
}

/** 用户列表（分页） */
export async function fetchUsers(params: {
  page?: number;
  page_size?: number;
  keyword?: string;
}): Promise<UserListData> {
  const searchParams = new URLSearchParams();
  if (params.page) searchParams.set('page', String(params.page));
  if (params.page_size) searchParams.set('page_size', String(params.page_size));
  if (params.keyword) searchParams.set('keyword', params.keyword);
  const res = await api.get<UserListData>(`/users?${searchParams.toString()}`);
  return res.data;
}

/** 创建用户 */
export async function createUser(data: CreateUserParams) {
  return api.post('/users', data);
}

/** 编辑用户 */
export async function updateUser(id: number, data: UpdateUserParams) {
  return api.put(`/users/${id}`, data);
}

/** 重置密码 */
export async function resetPassword(id: number, password?: string) {
  return api.put(`/users/${id}/reset-password`, { password });
}

/** 启用/禁用用户 */
export async function setUserStatus(id: number, status: number) {
  return api.put(`/users/${id}/status`, { status });
}

/** 删除用户 */
export async function deleteUser(id: number) {
  return api.delete(`/users/${id}`);
}

// ── 操作日志 ──

/** 操作日志项 */
export interface OperationLog {
  id: number;
  user_id: number;
  user_name: string;
  action: string;
  target_type: string | null;
  target_id: number | null;
  detail: string | null;
  created_at: string;
}

/** 操作日志列表响应 */
export interface OperationLogListData {
  list: OperationLog[];
  total: number;
}

/** 操作日志列表（分页+过滤） */
export async function fetchOperationLogs(params: {
  user_id?: number;
  action?: string;
  start_time?: string;
  end_time?: string;
  page?: number;
  page_size?: number;
}): Promise<OperationLogListData> {
  const searchParams = new URLSearchParams();
  if (params.user_id) searchParams.set('user_id', String(params.user_id));
  if (params.action) searchParams.set('action', params.action);
  if (params.start_time) searchParams.set('start_time', params.start_time);
  if (params.end_time) searchParams.set('end_time', params.end_time);
  if (params.page) searchParams.set('page', String(params.page));
  if (params.page_size) searchParams.set('page_size', String(params.page_size));
  const res = await api.get<OperationLogListData>(`/operation-logs?${searchParams.toString()}`);
  return res.data;
}
