import api from '../config/api';

export interface AuditLog {
  id: number;
  company_id: number;
  user_id: number;
  user_name?: string;
  user_email?: string;
  action: string;
  entity_type: string;
  entity_id: number | null;
  entity_label: string | null;
  old_value: any;
  new_value: any;
  ip_address: string | null;
  created_at: string;
  first_name?: string;
  last_name?: string;
  email?: string;
}

export interface AuditStats {
  by_action: Array<{ action: string; count: number }>;
  by_entity: Array<{ entity_type: string; count: number }>;
  last_24h: number;
}

export interface AuditPagination {
  page: number;
  limit: number;
  total: number;
  pages: number;
}

export const auditService = {
  async list(params?: {
    action?: string;
    entity_type?: string;
    user_id?: number;
    from_date?: string;
    to_date?: string;
    page?: number;
    limit?: number;
  }): Promise<{ data: AuditLog[]; pagination: AuditPagination }> {
    const query = new URLSearchParams();
    if (params?.action) query.set('action', params.action);
    if (params?.entity_type) query.set('entity_type', params.entity_type);
    if (params?.user_id) query.set('user_id', String(params.user_id));
    if (params?.from_date) query.set('from_date', params.from_date);
    if (params?.to_date) query.set('to_date', params.to_date);
    if (params?.page) query.set('page', String(params.page));
    if (params?.limit) query.set('limit', String(params.limit));

    const qs = query.toString();
    const response = await api.get(`/audit${qs ? '?' + qs : ''}`);
    return {
      data: response.data.data || [],
      pagination: response.data.pagination || { page: 1, limit: 50, total: 0, pages: 0 },
    };
  },

  async stats(): Promise<AuditStats> {
    const response = await api.get('/audit/stats');
    return response.data.data || { by_action: [], by_entity: [], last_24h: 0 };
  },
};
