export interface Integration {
  id: number;
  code: string;
  name: string;
  category: string;
  logo: string | null;
  description: string | null;
  enabled: boolean;
  connection_method: "sftp" | "manual" | "api" | "oauth";
  activation_mode: "immediate" | "on_request";
  modules: string[] | null;
  requirements: string | null;
  activation_steps: string[] | null;
  sync_frequency: "real_time" | "hourly" | "daily" | "weekly" | null;
  integration_connections_count: number;
  created_at: string;
  updated_at: string;
}

export interface IntegrationCredentialItem {
  name: string;
  type: string;
  value: string;
}

export interface IntegrationConnection {
  id: number;
  company_id: number;
  integration_id: number;
  status: 'disconnected' | 'connected' | 'requested' | 'rejected' | 'error' | string;
  credentials?: IntegrationCredentialItem[] | null;
  connected_at: string | null;
  last_sync_at: string | null;
  created_at?: string | null;
  updated_at?: string | null;
  integration?: Integration;
  company?: {
    id: number;
    name: string;
    email: string;
  };
}

export interface UpdateIntegrationConnectionPayload {
  status?: 'disconnected' | 'connected' | 'requested' | 'rejected' | 'error';
  credentials?: IntegrationCredentialItem[] | null;
  connected_at?: string | null;
  last_sync_at?: string | null;
}

export interface IntegrationConnectionQueryParams {
  status?: string;
  company_id?: number;
  category?: string;
}

export interface IntegrationDetail extends Integration {
  integration_connections: IntegrationConnection[];
}

export interface UpdateIntegrationPayload {
  name?: string;
  category?: string;
  logo?: string | null;
  description?: string | null;
  enabled?: boolean;
  connection_method?: "sftp" | "manual" | "api" | "oauth";
  activation_mode?: "immediate" | "on_request";
  modules?: string[] | null;
  requirements?: string | null;
  activation_steps?: string[] | null;
  sync_frequency?: "real_time" | "hourly" | "daily" | "weekly" | null;
}

export interface IntegrationQueryParams {
  search?: string;
  category?: string;
  enabled?: boolean;
}
