// Generated by alef. Do not edit by hand.
@file:Suppress(
    "ktlint:standard:trailing-comma-on-call-site",
    "ktlint:standard:trailing-comma-on-declaration-site",
    "ktlint:standard:spacing-between-declarations-with-comments",
    "ktlint:standard:spacing-between-declarations-with-annotations",
    "ktlint:standard:when-entry-bracing",
    "ktlint:standard:blank-line-between-when-conditions",
    "ktlint:standard:blank-line-before-declaration",
    "ktlint:standard:chain-method-continuation",
    "ktlint:standard:annotation",
    "ktlint:standard:max-line-length",
    "ktlint:standard:no-semi",
    "ktlint:standard:statement-wrapping",
    "MaxLineLength",
    "TooManyFunctions",
    "FunctionParameterNaming",
    "LongParameterList",
    "CyclomaticComplexMethod",
    "LongMethod",
)

package dev.kreuzberg

/**
 * HTML metadata extracted from HTML documents.
 *
 * Includes document-level metadata, Open Graph data, Twitter Card metadata,
 * and extracted structural elements (headers, links, images, structured data).
 */
data class HtmlMetadata(
    /** Document title from `<title>` tag */
    val title: String? = null,
    /** Document description from `<meta name="description">` tag */
    val description: String? = null,
    /** Document keywords from `<meta name="keywords">` tag, split on commas */
    val keywords: List<String> = emptyList(),
    /** Document author from `<meta name="author">` tag */
    val author: String? = null,
    /** Canonical URL from `<link rel="canonical">` tag */
    val canonicalUrl: String? = null,
    /** Base URL from `<base href="">` tag for resolving relative URLs */
    val baseHref: String? = null,
    /** Document language from `lang` attribute */
    val language: String? = null,
    /** Document text direction from `dir` attribute */
    val textDirection: TextDirection? = null,
    /**
     * Open Graph metadata (og:* properties) for social media
     * Keys like "title", "description", "image", "url", etc.
     */
    val openGraph: Map<String, String> = emptyMap(),
    /**
     * Twitter Card metadata (twitter:* properties)
     * Keys like "card", "site", "creator", "title", "description", "image", etc.
     */
    val twitterCard: Map<String, String> = emptyMap(),
    /**
     * Additional meta tags not covered by specific fields
     * Keys are meta name/property attributes, values are content
     */
    val metaTags: Map<String, String> = emptyMap(),
    /** Extracted header elements with hierarchy */
    val headers: List<HeaderMetadata> = emptyList(),
    /** Extracted hyperlinks with type classification */
    val links: List<LinkMetadata> = emptyList(),
    /** Extracted images with source and dimensions */
    val images: List<ImageMetadataType> = emptyList(),
    /** Extracted structured data blocks */
    val structuredData: List<StructuredData> = emptyList(),
)
