/**
 * filekorolheader: 操作日志API - 操作日志相关接口调用
 * 功能：获取操作日志列表、统计、导出等功能
 * 路径：/central-config/monitor/operation-log/components/operationLogApi
 * 规范：遵循crop-x/docs/开发项目规范.md，使用SDK生成的API接口
 */
import {
  listOperationLogsApiV1LogsOperationOperationLogsGet,
  getOperationStatisticsApiV1LogsOperationOperationLogsStatisticsGet,
  exportOperationLogsApiV1LogsOperationOperationLogsExportGet
} from '@/lib/api/sdk.gen';

// 操作日志接口
export interface OperationLog {
  id: string;
  created_at: string;
  updated_at: string;
  username: string;
  user_id: string | null;
  operation_type: string;
  module: string;
  action: string;
  request_method: string;
  request_url: string;
  request_headers: any | null;
  request_body: any | null;
  request_params: any | null;
  response_status: number;
  response_body: any | null;
  error_message: string | null;
  processing_time: number;
}

// 分页参数接口
export interface OperationLogsQueryParams {
  page?: number;
  size?: number;
  username?: string;
  module?: string;
  action?: string;
  operation_type?: string;
  response_status?: number;
  start_time?: string;
  end_time?: string;
  sort_order?: 'asc' | 'desc';
  order_by?: string;
}

// 分页状态接口
export interface PaginationState {
  page: number;
  size: number;
  total: number;
  totalPages?: number;
  hasNext?: boolean;
  hasPrev?: boolean;
}

// 统计数据接口
export interface OperationLogStatistics {
  total_operations: number;
  successful_operations: number;
  failed_operations: number;
  unique_users: number;
  success_rate: number;
  average_processing_time: number;
}

/**
 * 获取操作日志列表
 */
export const fetchOperationLogs = async (params: OperationLogsQueryParams = {}) => {
  try {
    // Get token from localStorage
    const storedUser = localStorage.getItem('user');
    let headers = {};

    if (storedUser) {
      const userData = JSON.parse(storedUser);
      if (userData.token) {
        headers = {
          'Authorization': `Bearer ${userData.token}`
        };
      }
    }

    const response = await listOperationLogsApiV1LogsOperationOperationLogsGet({
      headers,
      query: {
        page: params.page || 1,
        size: params.size || 10,
        username: params.username,
        module: params.module,
        action: params.action,
        operation_type: params.operation_type,
        response_status: params.response_status,
        start_time: params.start_time,
        end_time: params.end_time,
        sort_order: params.sort_order || 'desc',
        order_by: params.order_by || 'created_at',
      }
    });

    return {
      data: response.data?.data || [],
      page: response.data?.page || 1,
      size: response.data?.size || 10,
      total: response.data?.total || 0,
      totalPages: response.data?.total_pages || 0,
      hasNext: response.data?.has_next || false,
      hasPrev: response.data?.has_prev || false,
    };
  } catch (error) {
    console.error('Failed to fetch operation logs:', error);
    throw error;
  }
};

/**
 * 获取操作统计信息
 */
export const fetchOperationStatistics = async () => {
  try {
    // Get token from localStorage
    const storedUser = localStorage.getItem('user');
    let headers = {};

    if (storedUser) {
      const userData = JSON.parse(storedUser);
      if (userData.token) {
        headers = {
          'Authorization': `Bearer ${userData.token}`
        };
      }
    }

    const response = await getOperationStatisticsApiV1LogsOperationOperationLogsStatisticsGet({
      headers
    });
    return response.data;
  } catch (error) {
    console.error('Failed to fetch operation statistics:', error);
    throw error;
  }
};

/**
 * 导出操作日志
 */
export const exportOperationLogs = async (params: OperationLogsQueryParams = {}) => {
  try {
    // Get token from localStorage
    const storedUser = localStorage.getItem('user');
    let headers = {};

    if (storedUser) {
      const userData = JSON.parse(storedUser);
      if (userData.token) {
        headers = {
          'Authorization': `Bearer ${userData.token}`
        };
      }
    }

    const response = await exportOperationLogsApiV1LogsOperationOperationLogsExportGet({
      headers,
      query: {
        username: params.username,
        module: params.module,
        action: params.action,
        operation_type: params.operation_type,
        response_status: params.response_status,
        start_time: params.start_time,
        end_time: params.end_time,
      }
    });
    return response.data;
  } catch (error) {
    console.error('Failed to export operation logs:', error);
    throw error;
  }
};

/**
 * 转换操作日志数据 - 适配组件使用
 */
export const transformOperationLogData = (log: any): OperationLog => ({
  id: log.id,
  created_at: log.created_at,
  updated_at: log.updated_at,
  username: log.username,
  user_id: log.user_id,
  operation_type: log.operation_type,
  module: log.module,
  action: log.action,
  request_method: log.request_method,
  request_url: log.request_url,
  request_headers: log.request_headers,
  request_body: log.request_body,
  request_params: log.request_params,
  response_status: log.response_status,
  response_body: log.response_body,
  error_message: log.error_message,
  processing_time: log.processing_time,
});

/**
 * 批量转换操作日志数据
 */
export const transformOperationLogsList = (logs: any[]): OperationLog[] => {
  return logs.map(transformOperationLogData);
};