export type GrowBetterDirection = 'higher' | 'lower' | 'balanced';

export type GrowBetterHelp = {
    what: string;
    why: string;
};

export type GrowBetterKpi = {
    key: string;
    name: string;
    weight: number;
    enabled: boolean;
    value: number | null;
    display: string | null;
    source: 'computed' | 'manual';
    direction: GrowBetterDirection;
    unit: string;
    floor: number;
    target: number;
    meta: string;
    help: GrowBetterHelp;
};

export type GrowBetterPillarModel = {
    key: string;
    name: string;
    optional: boolean;
    color: string;
    help: GrowBetterHelp;
    kpis: GrowBetterKpi[];
};

export type GrowBetterModel = {
    weights: Record<string, number>;
    pillars: GrowBetterPillarModel[];
};

export type ScoredKpi = GrowBetterKpi & {
    score: number | null;
    missing: boolean;
};

export type ScoredPillar = {
    key: string;
    name: string;
    optional: boolean;
    color: string;
    help: GrowBetterHelp;
    weight: number;
    score: number | null;
    display_score: number | null;
    delta: number | null;
    contribution: number;
    active_kpi_count: number;
    kpi_count: number;
    kpis: ScoredKpi[];
};

export type GrowBetterAction = {
    rank: number;
    key: string;
    name: string;
    pillar: string;
    display: string;
    meta: string;
    score: number;
    gain: number;
    help: GrowBetterHelp;
    direction: GrowBetterDirection;
};

export type GrowBetterAlert = {
    tone: 'red' | 'amber' | 'green';
    text: string;
    context: string;
};

export type GrowBetterAssessment = {
    overall: number;
    grade: string;
    stage: string;
    delta: number | null;
    total_weight: number;
    pillars: ScoredPillar[];
    actions: GrowBetterAction[];
    alerts: GrowBetterAlert[];
};

export type GrowBetterPreset = {
    label: string;
    narrative: string;
    weights: Record<string, number>;
    enabled: Record<string, boolean>;
};

export type GrowBetterCompany = {
    id: string;
    name: string;
    account_type: string;
};

export type GrowBetterTrendPoint = {
    label: string;
    score: number;
    prior: number | null;
};

export type GrowBetterDraft = {
    industry: string;
    weights: Record<string, number>;
    enabled: Record<string, boolean>;
    values: Record<string, number | null>;
};
