interface Service {
    id: number;
    name: string;
    slug: string;
    description_markdown: string;
    summary?: string;
    pricing_info?: string;
    features_markdown?: string;
    featured: boolean;
    sort_order: number;
    photo_attachments?: Array<{
        id: number;
        featured: boolean;
        attachable_id?: number;
        attachable_type?: string;
        photo?: {
            id: number;
            title: string;
            thumbnail_url?: string;
            medium_url?: string;
            large_url?: string;
            original_url?: string;
        };
    }>;
    created_at: string;
    updated_at: string;
}
interface ServiceParams {
    featured?: boolean;
    q?: string;
    page?: number;
    per_page?: number;
}
type ServiceResponse = Service[];

/**
 * Photo and PhotoAttachment type definitions
 */
interface Photo {
    id: number;
    title: string;
    description?: string;
    alt_text?: string;
    thumbnail_url?: string;
    medium_url?: string;
    large_url?: string;
    original_url?: string;
    generated: boolean;
    created_at: string;
    updated_at: string;
}
interface PhotoAttachment {
    id: number;
    photo: Photo;
    featured: boolean;
    sort_order: number;
    created_at: string;
    updated_at: string;
}

/**
 * Form definition from API (GET /public/forms/:form_type).
 * fields is an ordered array; each item is a single field or an array of fields (inline row). Max depth 2.
 */
interface FormFieldDefinition {
    name: string;
    type: string;
    label: string;
    required?: boolean;
    placeholder?: string;
    /** For hidden fields, optional value to submit. */
    value?: string;
}
/** One item in the fields array: either a single field or a row of fields (inline). */
type FormFieldItem = FormFieldDefinition | FormFieldDefinition[];
interface FormDefinition {
    id: number;
    name: string;
    form_type: string;
    /** Ordered array; each element is a field or an array of fields (inline row). */
    fields: FormFieldItem[];
    settings?: Record<string, unknown>;
    created_at?: string;
    updated_at?: string;
}
type FormType = 'lead' | 'job_application';

export type { FormDefinition as F, Photo as P, Service as S, PhotoAttachment as a, FormFieldDefinition as b, FormFieldItem as c, FormType as d, ServiceParams as e, ServiceResponse as f };
