/**
 * Types TypeScript pour la gestion des utilisateurs - COOP-CA AMIFOND
 *
 * Types pour les endpoints API de gestion des utilisateurs
 */

import { User, UserType, UserProfile } from "./auth";

// Types pour les paramètres de liste d'utilisateurs
export interface UserListParams {
  page?: number;
  page_size?: number;
  search?: string;
  user_type?: UserType;
  is_active?: boolean;
  is_verified?: boolean;
  is_staff?: boolean;
  department?: string;
  date_joined_after?: string;
  date_joined_before?: string;
  ordering?: string;
}

// Types pour la réponse de liste d'utilisateurs
export interface UserListResponse {
  count: number;
  next: string | null;
  previous: string | null;
  results: User[];
}

// Types pour la création/modification d'utilisateurs
export interface CreateUserRequest {
  email: string;
  first_name: string;
  last_name: string;
  phone_number: string;
  user_type: UserType;
  department?: string;
  is_active?: boolean;
  is_staff?: boolean;
  password?: string;
  employee_id?: string;
}

export interface UpdateUserRequest {
  first_name?: string;
  last_name?: string;
  phone_number?: string;
  user_type?: UserType;
  department?: string;
  is_active?: boolean;
  is_staff?: boolean;
  employee_id?: string;
}

// Types pour les actions d'utilisateurs
export interface UserAction {
  action: "activate" | "deactivate" | "reset_password" | "send_verification";
  user_ids: number[];
  reason?: string;
}

// Types pour les statistiques d'utilisateurs
export interface UserStats {
  total_users: number;
  active_users: number;
  verified_users: number;
  users_by_type: Record<UserType, number>;
  recent_registrations: number;
  last_week_logins: number;
}

// Types pour les détails d'utilisateur avec profil
export interface UserDetail extends User {
  profile: UserProfile;
  permissions: string[];
  groups: string[];
  last_login_formatted?: string;
  date_joined_formatted?: string;
}

// Types pour les filtres de table
export interface UserTableFilters {
  search: string;
  user_type: UserType | "all";
  status: "all" | "active" | "inactive" | "verified" | "unverified";
  department: string;
}

// Types pour l'état de la table
export interface UserTableState {
  filters: UserTableFilters;
  sort: {
    field: keyof User | null;
    direction: "asc" | "desc";
  };
  pagination: {
    page: number;
    pageSize: number;
  };
}

// Types pour les erreurs de validation
export interface UserValidationError {
  field: string;
  message: string;
  code?: string;
}

export interface UserFormErrors {
  email?: string[];
  first_name?: string[];
  last_name?: string[];
  phone_number?: string[];
  user_type?: string[];
  department?: string[];
  password?: string[];
  non_field_errors?: string[];
}

// API Error types
export interface ApiError {
  message: string;
  response?: {
    data?: {
      detail?: string;
      email?: string[];
      [key: string]: unknown;
    };
  };
}
