import { api } from '@/shared/utils/api';
import { API_ENDPOINTS } from '@/shared/constants/apiEndpoints';

export interface UserInvite {
  id: string;
  email: string;
  company_id: string;
  department_id: string | null;
  role_name: string | null;
  is_department_head?: boolean;
  expires_at: string;
  accepted_at: string | null;
  revoked_at: string | null;
  status: 'pending' | 'accepted' | 'revoked' | 'expired';
  created_at: string;
}

type InviteListResponse = {
  data: UserInvite[];
};

export const inviteService = {
  async list(): Promise<UserInvite[]> {
    const response = await api.get<InviteListResponse>(API_ENDPOINTS.ADMIN.INVITES);
    return response.data;
  },

  async create(payload: {
    email: string;
    company_id: string;
    department_id: string;
    role_name?: string;
    is_department_head?: boolean;
  }): Promise<UserInvite> {
    const response = await api.post<{ data: UserInvite }>(API_ENDPOINTS.ADMIN.INVITES, payload);
    return response.data;
  },

  async revoke(id: string): Promise<void> {
    await api.delete(API_ENDPOINTS.ADMIN.INVITE(id));
  },

  async resend(id: string): Promise<UserInvite> {
    const response = await api.post<{ data: UserInvite }>(API_ENDPOINTS.ADMIN.INVITE_RESEND(id));
    return response.data;
  },
};
