/**
 * Types pour Odentas Sign - Système de signature électronique souverain
 */

export interface SignRequest {
  id: string;
  ref: string;
  title: string;
  source_s3_key: string;
  status: 'pending' | 'in_progress' | 'completed' | 'cancelled';
  created_at: string;
}

export interface Signer {
  id: string;
  request_id: string;
  role: 'Employeur' | 'Salarié';
  name: string;
  email: string;
  otp_hash: string | null;
  otp_expires_at: string | null;
  otp_attempts: number;
  otp_last_sent_at: string | null;
  signed_at: string | null;
  signature_image_s3: string | null;
  consent_text: string | null;
  consent_at: string | null;
  ip_signed: string | null;
  user_agent: string | null;
}

export interface SignPosition {
  id: string;
  request_id: string;
  role: 'Employeur' | 'Salarié';
  page: number;
  x: number;
  y: number;
  w: number;
  h: number;
  kind: 'signature' | 'text' | 'date' | 'checkbox';
  label: string | null;
  created_at: string;
}

export interface SignEvent {
  id: number;
  request_id: string;
  signer_id: string | null;
  ts: string;
  event: string;
  ip: string | null;
  user_agent: string | null;
  metadata: Record<string, any> | null;
}

export interface SignAsset {
  request_id: string;
  signed_pdf_s3_key: string | null;
  evidence_json_s3_key: string | null;
  tsa_tsr_s3_key: string | null;
  pdf_sha256: string | null;
  tsa_token_sha256: string | null;
  sealed_at: string | null;
  seal_algo: string | null;
  seal_kms_key_id: string | null;
  tsa_policy_oid: string | null;
  tsa_serial: string | null;
  retain_until: string | null;
}

export interface CreateSignRequestInput {
  contractId: string;
  contractRef: string;
  pdfS3Key: string;
  title: string;
  signers: {
    role: 'Employeur' | 'Salarié';
    name: string;
    email: string;
  }[];
  positions: {
    role: 'Employeur' | 'Salarié';
    page: number;
    x: number;
    y: number;
    w: number;
    h: number;
    kind?: 'signature' | 'text' | 'date' | 'checkbox';
    label?: string;
  }[];
}

export interface SignatureSessionToken {
  signerId: string;
  requestId: string;
  email: string;
  role: string;
  iat: number;
  exp: number;
}

export interface EvidenceBundle {
  request_id: string;
  request_ref: string;
  title: string;
  created_at: string;
  completed_at: string;
  eidas_level: 'SES' | 'AES' | 'QES';
  signers: {
    id: string;
    role: string;
    name: string;
    email: string;
    signed_at: string;
    ip_address: string;
    user_agent: string;
    consent_text: string;
    consent_at: string;
    signature_method: 'drawn' | 'uploaded';
    authentication: {
      method: 'OTP';
      otp_sent_at: string;
      otp_verified_at: string;
      email_verified: true;
    };
  }[];
  events: {
    timestamp: string;
    event: string;
    actor: string | null;
    ip: string | null;
    metadata: Record<string, any> | null;
  }[];
  seal: {
    algorithm: string;
    kms_key_id: string;
    sealed_at: string;
    pdf_sha256: string;
  };
  tsa: {
    url: string;
    tsr_sha256: string;
    policy_oid: string | null;
    serial: string | null;
  };
  retention: {
    archive_key: string;
    retain_until: string;
    compliance_mode: 'GOVERNANCE' | 'COMPLIANCE';
  };
}
