// types.ts — shared TypeScript types for Jean-Claude

type Provider = 'openai' | 'anthropic' | 'gemini';

interface ProviderConfig {
  provider: Provider;
  apiKey: string;
  model: string;
}

interface ChatMsg {
  role: 'user' | 'assistant' | 'system';
  content: string;
}

interface JCMessage {
  id: string;
  role: 'user' | 'assistant' | 'system';
  content: string;
  timestamp: number;
  // Satire flags
  refused?: boolean;
  refusalReason?: string;
  citations?: string[];
  carbonGrams?: number; // CO2 equivalent in micrograms (fictional)
  inclusivityScore?: number;
  invoice?: { invoiceId: string; amountEur: number; reason: string };
  flagged?: { code: string; reason: string };
  isInvoice?: boolean;
}

interface JCConversation {
  id: string;
  title: string;
  messages: JCMessage[];
  createdAt: number;
  status?: 'compliant' | 'awaiting_consent' | 'awaiting_assessment' | 'pending_dpo' | 'under_consultation';
}

interface UISettings {
  language: 'en' | 'fr' | 'de' | 'it';
  satireDial: number; // 0..100
  storage: 'local' | 'session';
  citizenship: string; // ISO country code
  vonIntrusion: 'subtle' | 'normal' | 'aggressive';
  showVonOnLoad: boolean;
}

interface Regulation {
  id: string;
  title: string;
  real: boolean;
  summary: string;
}
