import type { DataSource, ConnectorRun } from '../domain/dataSource'
import {
  DataSourceType,
  SourceStatus,
  TermsStatus,
  ConnectorRunStatus,
} from '../domain/dataSource'
import { FreshnessStatus } from '../domain/enums'

export const MOCK_DATA_SOURCES: DataSource[] = [
  {
    id: 'src-001',
    name: 'ImmoScout24 – Zürich/Bern Feed',
    sourceType: DataSourceType.PUBLIC_WEB_SOURCE,
    legalBasis: 'Öffentlich zugängliche Listings – keine personenbezogenen Daten',
    termsStatus: TermsStatus.NEEDS_LEGAL_REVIEW,
    dataCategories: ['Gewerbeimmobilien', 'Mietpreise', 'Verfügbarkeit'],
    supportedAssetTypes: ['OFFICE', 'RETAIL', 'LIGHT_INDUSTRIAL'],
    regionCoverage: ['Zürich', 'Bern', 'Basel'],
    reliabilityScore: 0.72,
    freshnessStatus: FreshnessStatus.FRESH,
    lastRunAt: '2026-05-15T06:00:00Z',
    nextRunAt: '2026-05-16T06:00:00Z',
    status: SourceStatus.ACTIVE,
    notes: 'Daily refresh via FUTURE_CRAWLER_STUB. Rechtliche Freigabe ausstehend.',
  },
  {
    id: 'src-002',
    name: 'Ideal Sharing Portfolio Export',
    sourceType: DataSourceType.INTERNAL_PORTFOLIO_EXPORT,
    ownerOrganizationId: 'org-001',
    legalBasis: 'Internes Dateneigentum – vollständig genehmigt',
    termsStatus: TermsStatus.APPROVED,
    dataCategories: ['Portoflio', 'Mietverträge', 'Flächen'],
    supportedAssetTypes: ['OFFICE', 'LOGISTICS', 'MIXED'],
    regionCoverage: ['Zürich', 'Zug', 'Luzern'],
    reliabilityScore: 0.97,
    freshnessStatus: FreshnessStatus.FRESH,
    lastRunAt: '2026-05-15T02:00:00Z',
    nextRunAt: '2026-05-15T14:00:00Z',
    status: SourceStatus.ACTIVE,
  },
  {
    id: 'src-003',
    name: 'CBRE Market Data API',
    sourceType: DataSourceType.API_CONNECTOR,
    ownerOrganizationId: 'org-002',
    legalBasis: 'API-Lizenzvertrag mit CBRE vom 12.01.2026',
    termsStatus: TermsStatus.APPROVED,
    dataCategories: ['Marktdaten', 'Mietindizes', 'Transaktionsvolumen'],
    supportedAssetTypes: ['OFFICE', 'RETAIL', 'LOGISTICS'],
    regionCoverage: ['Schweiz', 'DACH'],
    reliabilityScore: 0.91,
    freshnessStatus: FreshnessStatus.STALE,
    lastRunAt: '2026-05-13T10:00:00Z',
    nextRunAt: '2026-05-17T10:00:00Z',
    status: SourceStatus.ACTIVE,
    notes: 'Wöchentlicher Refresh – Quarterly Report verfügbar.',
  },
  {
    id: 'src-004',
    name: 'Handelsregister CH – Firmenumzüge',
    sourceType: DataSourceType.PUBLIC_WEB_SOURCE,
    legalBasis: 'Öffentliches Staatsregister (SHAB)',
    termsStatus: TermsStatus.APPROVED,
    dataCategories: ['Firmensitze', 'Umzüge', 'Neugründungen'],
    supportedAssetTypes: ['OFFICE', 'MIXED'],
    regionCoverage: ['Schweiz'],
    reliabilityScore: 0.88,
    freshnessStatus: FreshnessStatus.FRESH,
    lastRunAt: '2026-05-15T03:30:00Z',
    nextRunAt: '2026-05-16T03:30:00Z',
    status: SourceStatus.ACTIVE,
  },
  {
    id: 'src-005',
    name: 'Baubewilligungsregister Kt. Zürich',
    sourceType: DataSourceType.FUTURE_CRAWLER_STUB,
    legalBasis: 'Amtliche Publikation – öffentlich zugänglich',
    termsStatus: TermsStatus.UNKNOWN,
    dataCategories: ['Baubewilligungen', 'Umnutzungen', 'Abbrüche'],
    supportedAssetTypes: ['OFFICE', 'PRODUCTION', 'LIGHT_INDUSTRIAL'],
    regionCoverage: ['Kanton Zürich'],
    reliabilityScore: 0.65,
    freshnessStatus: FreshnessStatus.OUTDATED,
    lastRunAt: '2026-04-30T08:00:00Z',
    status: SourceStatus.PENDING_REVIEW,
    notes: 'Crawler-Implementierung noch ausstehend. Manuelle Prüfung erforderlich.',
  },
  {
    id: 'src-006',
    name: 'Mietvertragsdaten (CSV Upload – Q1 2026)',
    sourceType: DataSourceType.CSV_IMPORT,
    ownerOrganizationId: 'org-001',
    legalBasis: 'Interner Upload durch Portfoliomanager – DSGVO-konform',
    termsStatus: TermsStatus.APPROVED,
    dataCategories: ['Mietverträge', 'Laufzeiten', 'Mieter'],
    supportedAssetTypes: ['OFFICE', 'RETAIL'],
    regionCoverage: ['Zürich', 'Basel'],
    reliabilityScore: 0.84,
    freshnessStatus: FreshnessStatus.STALE,
    lastRunAt: '2026-03-31T09:00:00Z',
    status: SourceStatus.PAUSED,
    notes: 'Q2-Upload ausstehend. Quelle pausiert bis neue Datei verfügbar.',
  },
  {
    id: 'src-007',
    name: 'JLL Research Partner Feed',
    sourceType: DataSourceType.PARTNER_FEED,
    ownerOrganizationId: 'org-003',
    legalBasis: 'Datenaustauschabkommen mit JLL Schweiz AG – vertraulich',
    termsStatus: TermsStatus.RESTRICTED,
    dataCategories: ['Marktberichte', 'Leerstandsquoten', 'Prime Rents'],
    supportedAssetTypes: ['OFFICE', 'LOGISTICS'],
    regionCoverage: ['Zürich', 'Genf', 'Basel'],
    reliabilityScore: 0.93,
    freshnessStatus: FreshnessStatus.FRESH,
    lastRunAt: '2026-05-15T07:00:00Z',
    nextRunAt: '2026-05-22T07:00:00Z',
    status: SourceStatus.ACTIVE,
    notes: 'Wöchentlicher Push durch JLL. Nur für interne Nutzung – kein Re-Export.',
  },
  {
    id: 'src-008',
    name: 'Analyst-Eingaben (Team Zürich)',
    sourceType: DataSourceType.ANALYST_ENTRY,
    ownerOrganizationId: 'org-001',
    legalBasis: 'Interne Datenerhebung durch Analysten-Team',
    termsStatus: TermsStatus.APPROVED,
    dataCategories: ['Marktsignale', 'Qualitative Einschätzungen', 'Netzwerkinfos'],
    supportedAssetTypes: ['OFFICE', 'RETAIL', 'MIXED'],
    regionCoverage: ['Zürich', 'Winterthur'],
    reliabilityScore: 0.78,
    freshnessStatus: FreshnessStatus.FRESH,
    lastRunAt: '2026-05-14T16:45:00Z',
    status: SourceStatus.ACTIVE,
  },
  {
    id: 'src-009',
    name: 'Homegate Gewerbe-Scraper (Beta)',
    sourceType: DataSourceType.FUTURE_CRAWLER_STUB,
    legalBasis: 'In rechtlicher Prüfung – noch nicht freigegeben',
    termsStatus: TermsStatus.BLOCKED,
    dataCategories: ['Gewerbelistings', 'Mietpreise'],
    supportedAssetTypes: ['OFFICE', 'RETAIL'],
    regionCoverage: ['Schweiz'],
    reliabilityScore: 0.0,
    freshnessStatus: FreshnessStatus.OUTDATED,
    status: SourceStatus.DISABLED,
    errorState: 'Quelle gesperrt – robots.txt-Prüfung negativ, AGB untersagt automatisiertes Crawling.',
  },
]

export const MOCK_CONNECTOR_RUNS: ConnectorRun[] = [
  // src-001 runs
  {
    id: 'run-001-a',
    sourceId: 'src-001',
    startedAt: '2026-05-15T06:00:00Z',
    finishedAt: '2026-05-15T06:12:34Z',
    status: ConnectorRunStatus.COMPLETED,
    itemsDetected: 342,
    itemsNormalized: 318,
    itemsRejected: 24,
    signalsCreated: 7,
    errors: [],
    warnings: ['24 Einträge ohne gültige Flächenangabe übersprungen'],
    runSummary: '342 Listings importiert. 318 normalisiert, 7 neue Marktsignale erkannt.',
  },
  {
    id: 'run-001-b',
    sourceId: 'src-001',
    startedAt: '2026-05-14T06:00:00Z',
    finishedAt: '2026-05-14T06:09:11Z',
    status: ConnectorRunStatus.COMPLETED,
    itemsDetected: 289,
    itemsNormalized: 277,
    itemsRejected: 12,
    signalsCreated: 4,
    errors: [],
    warnings: [],
    runSummary: '289 Listings importiert. 4 neue Marktsignale erkannt.',
  },
  {
    id: 'run-001-c',
    sourceId: 'src-001',
    startedAt: '2026-05-13T06:00:00Z',
    finishedAt: '2026-05-13T06:04:22Z',
    status: ConnectorRunStatus.PARTIAL,
    itemsDetected: 310,
    itemsNormalized: 201,
    itemsRejected: 109,
    signalsCreated: 2,
    errors: ['HTTP 429 nach 201 Einträgen – Rate Limit erreicht'],
    warnings: ['109 Einträge konnten nicht abgerufen werden'],
    runSummary: 'Teilimport wegen Rate Limiting. 201 von 310 Einträgen verarbeitet.',
  },
  // src-002 runs
  {
    id: 'run-002-a',
    sourceId: 'src-002',
    startedAt: '2026-05-15T02:00:00Z',
    finishedAt: '2026-05-15T02:03:08Z',
    status: ConnectorRunStatus.COMPLETED,
    itemsDetected: 1240,
    itemsNormalized: 1240,
    itemsRejected: 0,
    signalsCreated: 12,
    errors: [],
    warnings: [],
    runSummary: 'Vollständiger Portfolio-Sync. 12 Lease-Expiry-Signale erzeugt.',
  },
  {
    id: 'run-002-b',
    sourceId: 'src-002',
    startedAt: '2026-05-14T14:00:00Z',
    finishedAt: '2026-05-14T14:02:55Z',
    status: ConnectorRunStatus.COMPLETED,
    itemsDetected: 1238,
    itemsNormalized: 1238,
    itemsRejected: 0,
    signalsCreated: 3,
    errors: [],
    warnings: [],
    runSummary: 'Delta-Sync erfolgreich. 3 neue Objekte hinzugefügt.',
  },
  // src-003 runs
  {
    id: 'run-003-a',
    sourceId: 'src-003',
    startedAt: '2026-05-13T10:00:00Z',
    finishedAt: '2026-05-13T10:18:42Z',
    status: ConnectorRunStatus.COMPLETED,
    itemsDetected: 86,
    itemsNormalized: 86,
    itemsRejected: 0,
    signalsCreated: 0,
    errors: [],
    warnings: ['Quartalsdaten verfügbar – manueller Review empfohlen'],
    runSummary: 'Marktdaten-Update Q1 2026 importiert. 86 Datenpunkte aktualisiert.',
  },
  // src-004 runs
  {
    id: 'run-004-a',
    sourceId: 'src-004',
    startedAt: '2026-05-15T03:30:00Z',
    finishedAt: '2026-05-15T03:44:17Z',
    status: ConnectorRunStatus.COMPLETED,
    itemsDetected: 523,
    itemsNormalized: 498,
    itemsRejected: 25,
    signalsCreated: 9,
    errors: [],
    warnings: ['25 Einträge ohne Adressangabe ignoriert'],
    runSummary: '523 Handelsregistereinträge geprüft. 9 Firmensitz-Signale erkannt.',
  },
  // src-007 runs
  {
    id: 'run-007-a',
    sourceId: 'src-007',
    startedAt: '2026-05-15T07:00:00Z',
    finishedAt: '2026-05-15T07:05:30Z',
    status: ConnectorRunStatus.COMPLETED,
    itemsDetected: 14,
    itemsNormalized: 14,
    itemsRejected: 0,
    signalsCreated: 3,
    errors: [],
    warnings: [],
    runSummary: 'JLL Weekly Report verarbeitet. 3 Marktberichte als Signale importiert.',
  },
  // src-008 runs
  {
    id: 'run-008-a',
    sourceId: 'src-008',
    startedAt: '2026-05-14T16:45:00Z',
    finishedAt: '2026-05-14T16:45:52Z',
    status: ConnectorRunStatus.COMPLETED,
    itemsDetected: 3,
    itemsNormalized: 3,
    itemsRejected: 0,
    signalsCreated: 3,
    errors: [],
    warnings: [],
    runSummary: '3 manuelle Analysten-Einträge verarbeitet. Je 1 Signal pro Eintrag.',
  },
  // src-006 – last run before pause
  {
    id: 'run-006-a',
    sourceId: 'src-006',
    startedAt: '2026-03-31T09:00:00Z',
    finishedAt: '2026-03-31T09:02:19Z',
    status: ConnectorRunStatus.COMPLETED,
    itemsDetected: 412,
    itemsNormalized: 408,
    itemsRejected: 4,
    signalsCreated: 18,
    errors: [],
    warnings: ['4 Einträge mit doppelter Vertrags-ID ignoriert'],
    runSummary: 'Q1 CSV verarbeitet. 408 Mietverträge importiert, 18 Lease-Expiry-Signale.',
  },
]
