export interface AcceptanceCriterion {
  id: string;
  description: string;
  status: 'pending' | 'in_progress' | 'completed' | 'failed';
  verifiedBy?: string;
  verifiedAt?: Date;
}

export interface TaskDependency {
  id: string;
  type: 'blocks' | 'blocked_by' | 'relates_to' | 'parent_of' | 'child_of';
  targetId: string;
  targetType: 'task' | 'story' | 'epic';
  description?: string;
  createdAt: Date;
}

export interface TimeTracking {
  estimated: number; // hours
  actual: number; // hours
  remaining: number; // hours
  logs: TimeLog[];
}

export interface TimeLog {
  id: string;
  userId: string;
  hours: number;
  date: Date;
  description?: string;
}

export interface Attachment {
  id: string;
  name: string;
  url: string;
  type: string;
  size: number;
  uploadedBy: string;
  uploadedAt: Date;
}

export interface Comment {
  id: string;
  userId: string;
  content: string;
  createdAt: Date;
  updatedAt?: Date;
  editedBy?: string;
}

export interface ActivityLog {
  id: string;
  userId: string;
  action: string;
  entityType: 'task' | 'story' | 'epic' | 'sprint';
  entityId: string;
  changes?: Record<string, { old: any; new: any }>;
  timestamp: Date;
}

export interface CustomField {
  id: string;
  name: string;
  type: 'text' | 'number' | 'date' | 'select' | 'multiselect' | 'boolean';
  value: any;
  options?: string[]; // for select/multiselect
  required?: boolean;
}

export interface Subtask {
  id: string;
  title: string;
  completed: boolean;
  assignee?: string;
  completedAt?: Date;
  completedBy?: string;
}