export type ActivityFilterKey = 'all' | 'added' | 'modified' | 'consulted';
export type ActivityStatus = Exclude<ActivityFilterKey, 'all'>;
export type ActivityTone = 'positive' | 'primary' | 'neutral';
export type ActivityPaginationKind = 'previous' | 'page' | 'ellipsis' | 'next';

export interface NativeActivityLinkProps {
    inertia: false;
}

export interface InertiaActivityLinkProps {
    inertia: true;
}

export interface ActivityHomeLink extends InertiaActivityLinkProps {
    href: string;
}

export interface ActivityTime {
    label: string;
    datetime: string | null;
}

export interface ActivityItem {
    id: string;
    title: string;
    description: string | null;
    icon: string;
    tone: ActivityTone;
    status: ActivityStatus;
    statusLabel: string;
    href: string | null;
    linkProps: InertiaActivityLinkProps;
    time: ActivityTime | null;
}

export interface ActivityFilter {
    key: ActivityFilterKey;
    label: string;
    count: number;
    active: boolean;
    href: string;
    linkProps: InertiaActivityLinkProps;
}

export interface ActivityPaginationLink {
    label: string;
    href: string | null;
    active: boolean;
    kind: ActivityPaginationKind;
    linkProps: InertiaActivityLinkProps;
}

export interface ActivityPagination {
    currentPage: number;
    lastPage: number;
    perPage: number;
    total: number;
    from: number | null;
    to: number | null;
    links: ActivityPaginationLink[];
}

export interface ActivityPageProps {
    homeLink: ActivityHomeLink;
    activeFilter: ActivityFilterKey;
    items: ActivityItem[];
    filters: ActivityFilter[];
    pagination: ActivityPagination;
}
