// Module de types et placeholders sans donnees.
// La phase visuelle est terminee : la couche reelle (Postgres + Search Console
// + GA4 + Stripe) sera branchee progressivement et remplacera ces tableaux vides.
//
// IMPORTANT : tant que la couche reelle n'est pas la, les pages portail/admin
// affichent des etats vides. Aucune donnee fictive n'est exposee a l'utilisateur.

// === Comptes clients (admin) ===
export type ClientAccount = {
  id: string;
  company: string;
  contactName: string;
  email: string;
  plan: "essentiel" | "pro" | "signature";
  monthlyAmount: number;
  status: "actif" | "annule" | "suspendu";
  since: string;
  sites: number;
};

export const clients: ClientAccount[] = [];
export const activeClients: ClientAccount[] = [];

// === Revenus mensuels (admin) ===
export type RevenuePoint = { month: string; revenue: number; newClients: number };
export const revenueByMonth: RevenuePoint[] = [];

// === Factures ===
export type Invoice = {
  id: string;
  accountId: string;
  company: string;
  amount: number;
  issued: string;
  due: string;
  status: "payee" | "en_attente" | "impayee";
  paidAt?: string;
};

export const invoices: Invoice[] = [];
export const clientInvoices: Invoice[] = [];

// === Compte client courant (portail) ===
// Avant branchement reel : null. Les consommateurs derivent depuis la session
// Better Auth (cf. lib/auth/server.ts).
export const currentAccount: {
  id: string;
  company: string;
  contactName: string;
  email: string;
  monthlyAmount: number;
  nextChargeDate: string;
  paymentMethod: { type: "carte"; brand: string; last4: string; expiry: string } | null;
} | null = null;

export type SitePlan = "essentiel" | "pro" | "signature";

export const PLAN_LABELS: Record<SitePlan, string> = {
  essentiel: "Essentiel",
  pro: "Pro",
  signature: "Signature",
};

// === Sites du compte courant (portail) ===
export type ClientSite = {
  id: string;
  domain: string;
  label: string;
  thumbnailLabel: string;
  status: "en_ligne" | "maintenance";
  uptime: number;
  lastDeployAt: string;
  plan: SitePlan;
  monthlyAmount: number;
  isPrimary?: boolean;
};

export const currentSites: ClientSite[] = [];

export function getSiteById(id?: string): ClientSite | null {
  return currentSites.find((s) => s.id === id) ?? currentSites[0] ?? null;
}

// === Donnees analytiques par site (portail) ===
export type LighthouseStrategy = "mobile" | "desktop";

export type SiteData = {
  metrics: {
    searchConsole: {
      clicks: number; clicksDelta: number;
      impressions: number; impressionsDelta: number;
      ctr: number; ctrDelta: number;
      avgPosition: number; avgPositionDelta: number;
    };
    analytics: {
      sessions: number; sessionsDelta: number;
      users: number; usersDelta: number;
      avgDurationSec: number; avgDurationDelta: number;
      bounceRate: number; bounceRateDelta: number;
    };
  };
  dailySeries: Array<{ date: string; clicks: number; impressions: number; sessions: number }>;
  topQueries: Array<{ query: string; clicks: number; impressions: number; ctr: number; position: number }>;
  topPages: Array<{ path: string; title: string; sessions: number; avgDurationSec: number }>;
  trafficSources: Array<{ source: string; sessions: number; share: number }>;
  lighthouse: Record<LighthouseStrategy, {
    performance: number; accessibility: number; bestPractices: number; seo: number;
    coreWebVitals: { lcp: number; inp: number; cls: number };
    measuredAt: string;
  }>;
};

export function getSiteData(_siteId: string): SiteData | null {
  return null;
}

// === Tickets de support ===
export type TicketStatus = "ouvert" | "en_cours" | "resolu";
export type TicketCategory = "technique" | "facturation" | "evolution" | "autre";

export const TICKET_STATUS_LABELS: Record<TicketStatus, string> = {
  ouvert: "Ouvert",
  en_cours: "En cours",
  resolu: "Résolu",
};

export const TICKET_CATEGORY_LABELS: Record<TicketCategory, string> = {
  technique: "Question technique",
  facturation: "Facturation",
  evolution: "Demande d'évolution",
  autre: "Autre",
};

export type TicketMessage = {
  id: string;
  author: { name: string; role: "client" | "agent"; initials: string };
  content: string;
  sentAt: string;
};

export type Ticket = {
  id: string;
  reference: string;
  subject: string;
  status: TicketStatus;
  category: TicketCategory;
  accountId: string;
  accountCompany: string;
  siteId?: string;
  openedAt: string;
  lastUpdatedAt: string;
  assignedAgent?: { name: string; initials: string };
  messages: TicketMessage[];
};

export const tickets: Ticket[] = [];

export function getTicketByReference(_ref: string): Ticket | undefined {
  return undefined;
}

// === Equipe agence (admin interne) ===
export type AgentRole = "admin" | "support" | "comptabilite" | "lecture";

export const AGENT_ROLE_LABELS: Record<AgentRole, string> = {
  admin: "Administrateur",
  support: "Agent support",
  comptabilite: "Comptabilité",
  lecture: "Lecture seule",
};

export const AGENT_ROLE_DESCRIPTIONS: Record<AgentRole, string> = {
  admin: "Accès complet : clients, factures, tickets, intégrations, équipe.",
  support: "Accès aux tickets et aux fiches clients. Pas d'accès à la facturation ni aux paramètres.",
  comptabilite: "Accès à la facturation, aux clients et aux paramètres légaux. Pas d'accès aux tickets.",
  lecture: "Vue tableau de bord uniquement, sans modification possible.",
};

export type AgencyMember = {
  id: string;
  firstName: string;
  lastName: string;
  email: string;
  role: AgentRole;
  joinedAt: string;
  lastActiveAt: string;
};

export const agencyTeam: AgencyMember[] = [];

// === Integrations externes (admin) ===
export type IntegrationStatus = "connecte" | "non_configure" | "erreur";

export const INTEGRATION_STATUS_LABELS: Record<IntegrationStatus, string> = {
  connecte: "Connecté",
  non_configure: "Non configuré",
  erreur: "Erreur",
};

export type Integration = {
  id: string;
  name: string;
  description: string;
  category: "google" | "paiement" | "infrastructure" | "email";
  status: IntegrationStatus;
  details?: string;
  lastCheckAt?: string;
};

// La liste des integrations est figee (catalogue), seul leur statut viendra de la DB.
// On laisse une liste vide ici, la page integrations affiche un etat vide en attendant.
export const integrations: Integration[] = [];

// === Synthese IA (portail) ===
// Generee par Claude a partir des metriques Search Console + GA4. Null tant que
// la phase 2 n'est pas activee pour le client.
export const aiSummary: {
  generatedAt: string;
  highlights: string[];
  recommendation: string;
} | null = null;

// === Utilisateur connecte (portail) ===
// Avant branchement reel : null. Les consommateurs lisent la session Better Auth.
export const currentUser: {
  id: string;
  firstName: string;
  lastName: string;
  email: string;
  role: "admin";
  twoFactorEnabled: boolean;
  joinedAt: string;
} | null = null;

// === Equipe du compte client (portail) ===
export type TeamRole = "admin" | "lecteur" | "comptable";

export const ROLE_LABELS: Record<TeamRole, string> = {
  admin: "Administrateur",
  lecteur: "Lecteur",
  comptable: "Comptable",
};

export const ROLE_DESCRIPTIONS: Record<TeamRole, string> = {
  admin: "Accès complet au compte, à l'équipe, à la facturation et au tableau de bord.",
  lecteur: "Accès au tableau de bord en lecture seule. Aucun accès à la facturation.",
  comptable: "Accès aux factures et à la gestion de l'abonnement uniquement.",
};

export type TeamMember = {
  id: string;
  firstName: string;
  lastName: string;
  email: string;
  role: TeamRole;
  lastActiveAt: string;
  status: "actif" | "invitation_envoyee";
};

export const teamMembers: TeamMember[] = [];

export type ActiveSession = {
  id: string;
  device: string;
  os: string;
  location: string;
  ip: string;
  lastActive: string;
  current: boolean;
};

export const activeSessions: ActiveSession[] = [];
