# src/pdftl/fluent.pyi
from pathlib import Path
from typing import Any, Dict, List, Optional

import pikepdf
from pikepdf import Pdf

def pipeline(pdf_or_path: "Pdf | str | Path", password: "str | None" = None) -> "PdfPipeline": ...

class PdfPipeline:
    def __init__(self, pdf: pikepdf.Pdf): ...
    @classmethod
    def open(cls, filename: str, password: Optional[str] = None) -> "PdfPipeline": ...
    def save(self, output_path: str) -> "PdfPipeline": ...
    def get(self) -> pikepdf.Pdf: ...
    def __enter__(self) -> "PdfPipeline": ...
    def __exit__(self, t: Any, v: Any, tb: Any) -> None: ...
    def add_text(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def dump_files(self, output: Optional[str] = ...) -> "PdfPipeline": ...
    def unpack_files(self, output: Optional[str] = ...) -> "PdfPipeline": ...
    def burst(self) -> "PdfPipeline": ...
    def cat(
        self, inputs: Optional[List[str]] = ..., operation_args: Optional[List[str]] = ...
    ) -> "PdfPipeline": ...
    def chop(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def crop(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def delete(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def delete_annots(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def dump_annots(self, output: Optional[str] = ...) -> "PdfPipeline": ...
    def dump_data_annots(self, output: Optional[str] = ...) -> "PdfPipeline": ...
    def dump_data(self, output: Optional[str] = ...) -> "PdfPipeline": ...
    def dump_data_utf8(self, output: Optional[str] = ...) -> "PdfPipeline": ...
    def dump_data_fields(self, output: Optional[str] = ...) -> "PdfPipeline": ...
    def dump_data_fields_utf8(self, output: Optional[str] = ...) -> "PdfPipeline": ...
    def dump_dests(self, output: Optional[str] = ...) -> "PdfPipeline": ...
    def dump_layers(self, output: Optional[str] = ...) -> "PdfPipeline": ...
    def dump_signatures(
        self, password: Optional[str] = ..., output: Optional[str] = ...
    ) -> "PdfPipeline": ...
    def dump_text(
        self, password: Optional[str] = ..., output: Optional[str] = ...
    ) -> "PdfPipeline": ...
    def fill_form(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def filter(self) -> "PdfPipeline": ...
    def generate_fdf(self, output: Optional[str] = ...) -> "PdfPipeline": ...
    def inject(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def insert(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def modify_annots(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def move(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def normalize(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def optimize_images(
        self, operation_args: Optional[List[str]] = ..., output: Optional[str] = ...
    ) -> "PdfPipeline": ...
    def multibackground(self) -> "PdfPipeline": ...
    def background(self) -> "PdfPipeline": ...
    def multistamp(self) -> "PdfPipeline": ...
    def stamp(self) -> "PdfPipeline": ...
    def place(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def render(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def replace(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def rotate(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def shuffle(
        self, inputs: Optional[List[str]] = ..., operation_args: Optional[List[str]] = ...
    ) -> "PdfPipeline": ...
    def update_info(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
    def update_info_utf8(self, operation_args: Optional[List[str]] = ...) -> "PdfPipeline": ...
