export interface ComplianceRule {
  id: string;
  pattern: string;
  label: string;
  severity: number;
  category?: string;
}

export interface CompliancePolicy {
  id: string;
  version: number;
  name: string;
  isActive: boolean;
  propertyId: string;
  effectiveDate: string | null;
  prohibitedTerms: ComplianceRule[];
  discouragedTerms: ComplianceRule[];
  severityThresholds: { blockThreshold: number; warnThreshold: number };
  rewriteVoicePrompt: string | null;
}

export interface ScanFinding {
  ruleId: string;
  matchedText: string;
  severity: number;
  position: { start: number; end: number };
  field: string;
  label: string;
}

export interface ScanResult {
  status: 'PASS' | 'WARN' | 'BLOCK';
  severityScore: number;
  findings: ScanFinding[];
}

export interface PipelineResult {
  scanId: string;
  propertyId: string;
  originalStatus: 'PASS' | 'WARN' | 'BLOCK';
  finalStatus: 'PASS' | 'WARN' | 'BLOCK';
  severityScore: number;
  riskScoreAfter: number | null;
  findings: ScanFinding[];
  rewrittenText: string | null;
  rewriteAttempted: boolean;
  rewritePassed: boolean | null;
  note?: string;
}

export interface ContentPayload {
  propertyId?: string;
  contentType: 'blog_post' | 'forecast_copy' | 'site_copy';
  contentId?: string;
  contentSource?: string;
  fields: Record<string, string>;
}

// Property scoping constants
export const RAINMAKER_PROPERTY_ID = 'rainmaker_web';
export const COMPLIANCE_OFF_RESULT: PipelineResult = {
  scanId: '',
  propertyId: '',
  originalStatus: 'PASS',
  finalStatus: 'PASS',
  severityScore: 0,
  riskScoreAfter: null,
  findings: [],
  rewrittenText: null,
  rewriteAttempted: false,
  rewritePassed: null,
  note: 'compliance_off',
};
