import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { api } from './client';

export interface CertificateResponse {
  id: string;
  status: string;
  subject: string;
  issuer: string;
  notBefore: string;
  notAfter: string;
  fingerprint: string;
  hasCa: boolean;
  selfSigned: boolean;
  activatedAt: string | null;
  archivedAt: string | null;
}

export interface CertificateOverview {
  active: CertificateResponse | null;
  staged: CertificateResponse | null;
  archived: CertificateResponse | null;
  staleTenantCount: number;
}

export interface StageResponse {
  valid: boolean;
  errors: string[];
  certificate: CertificateResponse | null;
}

export function useVendorCertificates() {
  return useQuery<CertificateOverview>({
    queryKey: ['vendor', 'certificates'],
    queryFn: () => api.get('/vendor/certificates'),
  });
}

export function useStageCertificate() {
  const qc = useQueryClient();
  return useMutation<StageResponse, Error, FormData>({
    mutationFn: (formData) => api.post('/vendor/certificates/stage', formData),
    onSuccess: () => qc.invalidateQueries({ queryKey: ['vendor', 'certificates'] }),
  });
}

export function useActivateCertificate() {
  const qc = useQueryClient();
  return useMutation<void, Error, void>({
    mutationFn: () => api.post('/vendor/certificates/activate'),
    onSuccess: () => qc.invalidateQueries({ queryKey: ['vendor', 'certificates'] }),
  });
}

export function useRestoreCertificate() {
  const qc = useQueryClient();
  return useMutation<void, Error, void>({
    mutationFn: () => api.post('/vendor/certificates/restore'),
    onSuccess: () => qc.invalidateQueries({ queryKey: ['vendor', 'certificates'] }),
  });
}

export function useDiscardStaged() {
  const qc = useQueryClient();
  return useMutation<void, Error, void>({
    mutationFn: () => api.delete('/vendor/certificates/staged'),
    onSuccess: () => qc.invalidateQueries({ queryKey: ['vendor', 'certificates'] }),
  });
}
