/**
 * Types for the course-metadata feature slice.
 *
 * These mirror the shapes returned by LMS edX course metadata / outline /
 * enrollment eligibility endpoints. They are not present in
 * @iblai/iblai-api so we co-locate them with the slice.
 */
export interface CourseOutlineChildNode {
    id: string;
    block_id: string;
    lms_web_url?: string;
    legacy_web_url?: string;
    student_view_url?: string;
    type: string;
    display_name: string;
    graded?: boolean;
    start?: string;
    has_score?: boolean;
    resume_block?: boolean;
    completion?: number;
    complete?: boolean;
    scored?: boolean;
    num_graded_problems?: number;
    children?: CourseOutlineChildNode[];
    special_exam_info?: boolean;
}
export interface CourseOutlineResponse {
    display_name: string;
    graded: boolean;
    has_scheduled_content: boolean;
    has_score: boolean;
    id: string;
    legacy_web_url: string;
    lms_web_url: string;
    num_graded_problems: number;
    resume_block: boolean;
    scored: boolean;
    start: string;
    student_view_url: string;
    type: string;
    children: CourseOutlineChildNode[];
}
export interface CourseEligibilityResponse {
    is_enrolled: boolean;
    can_enroll: boolean;
    invitation_only: boolean;
    is_admin: boolean;
    is_eligible?: boolean;
}
export interface CourseEnrollmentRequest {
    course_details: {
        course_id: string;
    };
}
export interface CourseMode {
    slug: string;
    name: string;
    min_price: number;
    suggested_prices: string;
    currency: string;
    expiration_datetime: string | null;
    description: string | null;
    sku: string | null;
    bulk_sku: string | null;
}
export interface CourseEnrollmentResponse {
    created: string;
    mode: string;
    is_active: boolean;
    course_details: {
        course_id: string;
        course_name: string;
        enrollment_start: string;
        enrollment_end: string | null;
        course_start: string;
        course_end: string | null;
        invite_only: boolean;
        course_modes: CourseMode[];
        pacing_type: string;
    };
    user: string;
}
export interface CertificateData {
    cert_status: string;
    cert_web_view_url: string | null;
    download_url: string | null;
    certificate_available_date: string | null;
}
export interface CompletionSummary {
    complete_count: number;
    incomplete_count: number;
    locked_count: number;
}
export interface CourseGrade {
    letter_grade: string | null;
    percent: number;
    is_passing: boolean;
}
export interface AssignmentPolicy {
    num_droppable: number;
    num_total: number;
    short_label: string;
    type: string;
    weight: number;
}
export interface GradeRange {
    Pass: number;
}
export interface GradingPolicy {
    assignment_policies: AssignmentPolicy[];
    grade_range: GradeRange;
}
export interface Subsection {
    assignment_type: string | null;
    block_key: string;
    display_name: string;
    has_graded_assignment: boolean;
    override: unknown | null;
    learner_has_access: boolean;
    num_points_earned: number;
    num_points_possible: number;
    percent_graded: number;
    problem_scores: unknown[];
    show_correctness: string;
    show_grades: boolean;
    url: string;
}
export interface SectionScore {
    display_name: string;
    subsections: Subsection[];
}
export interface VerificationData {
    link: string | null;
    status: string;
    status_date: string | null;
}
export interface CourseProgress {
    can_show_upgrade_sock: boolean;
    verified_mode: string | null;
    access_expiration: string | null;
    certificate_data: CertificateData;
    completion_summary: CompletionSummary;
    course_grade: CourseGrade;
    credit_course_requirements: unknown | null;
    end: string | null;
    enrollment_mode: string;
    grading_policy: GradingPolicy;
    has_scheduled_content: boolean;
    section_scores: SectionScore[];
    studio_url: string;
    username: string;
    user_has_passing_grade: boolean;
    verification_data: VerificationData;
}
export interface CourseCompletionData {
    total_units: number;
    total_blocks: number;
    total_sections: number;
    completed_units: number;
    completed_blocks: number;
    total_subsections: number;
    completed_sections: number;
    completed_subsections: number;
}
export interface CourseCompletion {
    course_id: string;
    org: string;
    user_id: number;
    username: string;
    completion_percentage: number;
    completed: boolean;
    last_updated: string;
    completion_date: string | null;
    completion_data: CourseCompletionData;
    grading_percentage: number;
    passed: boolean;
    passing_date: string | null;
    grade_data: Record<string, unknown>;
}
