export interface User {
    id: number;
    name: string;
    email: string;
    nip: string | null;
    employee_id: number | null;
    is_active: boolean;
    satker: {
        id: number;
        name: string;
        code: string;
    } | null;
    roles: string[];
    permissions: string[];
}

export interface Satker {
    id: number;
    code: string;
    name: string;
    type: 'PT' | 'PA';
    address: string | null;
    phone: string | null;
    email: string | null;
    is_active: boolean;
    employees_count?: number;
    created_at: string;
    updated_at: string;
}

export interface Employee {
    id: number;
    user_id: number | null;
    nip: string;
    name: string;
    satker_id: number;
    unit_id: number | null;
    position_id: number | null;
    rank: string | null;
    group: string | null;
    photo: string | null;
    gender: 'L' | 'P' | null;
    birth_date: string | null;
    phone: string | null;
    email: string | null;
    is_active: boolean;
    satker?: Satker;
    unit?: Unit;
    position?: Position;
}

export interface Unit {
    id: number;
    satker_id: number;
    name: string;
    level: number;
    is_active: boolean;
}

export interface Position {
    id: number;
    name: string;
    category: 'hakim' | 'non-hakim';
    level: number;
    is_active: boolean;
}

export interface Period {
    id: number;
    name: string;
    year: number;
    start_date: string;
    end_date: string;
    is_active: boolean;
    status: 'open' | 'closed';
    description: string | null;
    assessments_count?: number;
}

export interface Question {
    id: number;
    category: 'integritas' | 'kedisiplinan';
    number: number;
    text: string;
    order: number;
    is_active: boolean;
}

export interface Assessment {
    id: number;
    period_id: number;
    employee_id: number;
    assessor_id: number;
    status: 'draft' | 'final';
    integrity_score: number | null;
    discipline_score: number | null;
    integrity_value: number | null;
    discipline_value: number | null;
    final_score: number | null;
    profile: 'A' | 'B' | 'C' | 'D' | 'E' | null;
    notes: string | null;
    submitted_at: string | null;
    employee?: Employee;
    assessor?: { id: number; name: string };
    period?: Period;
    details?: AssessmentDetail[];
}

export interface AssessmentDetail {
    id: number;
    assessment_id: number;
    question_id: number;
    score: number | null;
    notes: string | null;
    question?: Question;
}

export interface DashboardData {
    period: Period | null;
    summary: {
        total_employees: number;
        assessed: number;
        not_assessed: number;
        avg_integrity: number;
        avg_discipline: number;
        avg_final: number;
    };
    profile_distribution: Record<string, number>;
    satker_ranking: Array<{
        id: number;
        name: string;
        code: string;
        avg_score: number;
        total_assessed: number;
    }>;
}

export interface PaginatedResponse<T> {
    data: T[];
    current_page: number;
    last_page: number;
    per_page: number;
    total: number;
    from: number;
    to: number;
}
