import { Paginated } from './Paginated';

export interface PeerReviewRating {
  id: string;
  peer_review_id: string;
  competency_id: string;
  rating: number;
  comments?: string | null;
  competency?: Record<string, unknown> | null;
  created_at?: Date | null;
  updated_at?: Date | null;
}

export interface PeerReview {
  id: string;
  peer_review_assignment_id: string;
  appraisal_submission_id?: string | null;
  overall_rating?: number | null;
  overall_comments?: string | null;
  strengths?: string | null;
  areas_for_improvement?: string | null;
  recommendation?: string | null;
  submitted_at?: Date | null;
  assignment?: PeerReviewAssignment | null;
  appraisal_submission?: Record<string, unknown> | null;
  ratings?: PeerReviewRating[];
  created_at?: Date | null;
  updated_at?: Date | null;
}

export interface PeerReviewAssignment {
  id: string;
  appraisal_cycle_id: string;
  reviewee_id: string;
  reviewer_id: string;
  relationship_type: string;
  assigned_by?: string | null;
  status: string;
  is_anonymous: boolean;
  due_date?: string | null;
  completed_at?: Date | null;
  appraisal_cycle?: Record<string, unknown> | null;
  reviewee?: Record<string, unknown> | null;
  reviewer?: Record<string, unknown> | null;
  assigned_by_employee?: Record<string, unknown> | null;
  peer_review?: PeerReview | null;
  created_at?: Date | null;
  updated_at?: Date | null;
}

export interface CreatePeerReviewAssignmentPayload {
  appraisal_cycle_id: string;
  reviewee_id: string;
  reviewer_id: string;
  relationship_type: string;
  assigned_by?: string | null;
  is_anonymous?: boolean;
  due_date?: string | null;
}

export interface AutoAssignPeerReviewPayload {
  appraisal_cycle_id: string;
  reviewers_per_employee?: number;
  relationship_types?: string[];
}

export interface BulkAssignPeerReviewPayload {
  assignments: {
    appraisal_cycle_id: string;
    reviewee_id: string;
    reviewer_id: string;
    relationship_type: string;
    is_anonymous?: boolean;
    due_date?: string | null;
  }[];
}

export interface SubmitPeerReviewPayload {
  appraisal_submission_id?: string | null;
  overall_rating: number;
  overall_comments?: string | null;
  strengths?: string | null;
  areas_for_improvement?: string | null;
  recommendation?: string | null;
  ratings: {
    competency_id: string;
    rating: number;
    comments?: string | null;
  }[];
}

export interface PeerReviewAssignmentResponse {
  data: PeerReviewAssignment;
}

export interface PeerReviewResponse {
  data: PeerReview;
}

export interface AggregateScoresResponse {
  data: Record<string, unknown>;
}

export interface AnonymizedFeedbackResponse {
  data: Record<string, unknown>[];
}

export type PaginatedPeerReviewAssignments = Paginated<PeerReviewAssignment>;
export type PaginatedPeerReviews = Paginated<PeerReview>;
