// See App\Models\User
type User = {
    id: number;
    name: string;
    email: string;
};

export type Auth = {
    user: User;
};

type UrlString = string;
type EscapedHtmlString = string;

export type LengthAwarePaginatorLink = {
    active: boolean;
    label: EscapedHtmlString;
    page: null | number;
    url: UrlString | null;
};

export type LengthAwarePaginator<T> = {
    current_page: number;
    data: T[];
    first_page_url: UrlString;
    from: number | null;
    last_page: number;
    last_page_url: UrlString;
    links: LengthAwarePaginatorLink[];
    next_page_url: UrlString | null;
    path: UrlString;
    per_page: number;
    prev_page_url: UrlString | null;
    to: number | null;
    total: number;
};

// See App\Models\QuiltUpdate
export type QuiltUpdate = {
    id: number;
    location: string;
    // TODO - timezone isn't being included in update_date field
    update_date: string | null;
    status: string;
    user: User;
    email_sent: number | null;
    notes: string;
    imageUrl: string | null;
};

// See App\Models\Order
type Order = {
    id: number;
    email: string;
    phone_number: string | null;
    name: string;
    quilts?: Quilt[];
    first_name: string | null;
    last_name: string | null;
    shopify_id: number;
};

// See App\Models\Quilt
export type Quilt = {
    id: number;
    isDangerZone: boolean;
    last_update: string | null;
    customerName: string;
    orderName: string;
    due_date: string | null;
    received: string | null;
    status: QuiltUpdate | null;
    expedited: int;
    pattern: string;
    thread_color: string;
    binding_notes: string | null;
    include_trimming: number;
    include_binding: number;
    backing_included: number;
    backing_notes: string;
    order_note: string | null;
    length: number | null;
    width: number | null;
    order: Order | null;
    quilt_updates: QuiltUpdate[];
    humanReadableIdentifier: string;
    shopify_order_id: number;
    name: string;
    is_checked_in: boolean;
    batting: string | null;
};

// See App\Models\EmailCopy
export type EmailCopy = {
    id: number;
    email_copy: string;
    updated_at: string;
    template_name: string;
    email_subject: string;
};

// See App\Models\ShopifySyncLog
export type SyncLogEntry = {
    ran_at: string;
    exit_code: number;
    user: User | null;
};

// See Http\Middleware\HandleInertiaRequests
export type AppConfig = {
    dueDateDayOffset: number;
    dueDateExpressDayOffset: number;
};
