# This file was auto-generated by Fern from our API Definition.

import typing

import typing_extensions
from ..core.serialization import FieldMetadata
from ..types.created_at import CreatedAt
from ..types.file_type import FileType
from ..types.updated_at import UpdatedAt
from .file_contents import FileContentsParams
from .file_metadata import FileMetadataParams


class FileParams(typing_extensions.TypedDict):
    object: typing.Literal["file"]
    """
    The type of object. Will always be `"file"`.
    """

    id: str
    """
    ID for the file.
    
    Example: `"file_xK9mLPqRtN3vS8wF5hB2cQ"`
    """

    name: str
    """
    The name of the file
    
    Example: `"Invoices.pdf"`
    """

    type: typing.Optional[FileType]
    """
    The type of the file.
    
    **Availability:** Present when the file type could be determined.
    """

    presigned_url: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="presignedUrl")]
    """
    A presigned URL to download the file. Expires after 15 minutes.
    
    **Availability:** Present on `GET /files/{id}`. Not present on `POST /files/upload` or when the file is embedded in other resources (e.g., in run responses).
    """

    parent_file_id: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="parentFileId")]
    """
    ID of the parent file.
    
    **Availability:** Present for files created via a Splitter in a workflow.
    """

    contents: typing.Optional[FileContentsParams]
    """
    **Deprecated:** Use the `POST /parse_runs` endpoint instead to parse and retrieve file contents. The parse runs endpoint provides more control over parsing configuration and better performance.
    
    The parsed content of the file. This field will only contain data after the file has been parsed via a parse run, extract run, classify run, split run, edit run, or workflow run.
    
    **Availability:** Only present and populated on `GET /files/{id}` when the file has been previously parsed and the corresponding query parameters are set to true. Will be `null` on `POST /files/upload` and for files that haven't been parsed. The structure varies based on file type.
    """

    metadata: FileMetadataParams
    created_at: typing_extensions.Annotated[CreatedAt, FieldMetadata(alias="createdAt")]
    updated_at: typing_extensions.Annotated[UpdatedAt, FieldMetadata(alias="updatedAt")]
