from .client import http_get as http_get, http_patch as http_patch
from .model import MoneybirdModel as MoneybirdModel
from enum import Enum
from typing import Any, Self

class LinkBookingType(Enum):
    LedgerAccount = ...
    SalesInvoice = ...
    Document = ...
    PaymentTransactionBatch = ...
    PurchaseTransaction = ...
    NewPurchaseInvoice = ...
    NewReceipt = ...
    PaymentTransaction = ...
    PurchaseTransactionBatch = ...
    ExternalSalesInvoice = ...
    Payment = ...
    VatDocument = ...

class UnlinkBookingType(Enum):
    LedgerAccountBooking = ...
    Payment = ...

class FinancialMutation(MoneybirdModel):
    id: int | None
    administration_id: str | int | None
    amount: str | None
    code: str | None
    date: str | None
    message: str | None
    contra_account_name: str | None
    contra_account_number: str | None
    state: str | None
    amount_open: str | None
    sepa_fields: dict | None
    batch_reference: str | None
    financial_account_id: str | None
    currency: str | None
    original_amount: str | None
    created_at: str | None
    updated_at: str | None
    version: str | int | None
    financial_statement_id: str | None
    processed_at: str | None
    account_servicer_transaction_id: str | None
    payments: list[Any]
    ledger_account_bookings: list[Any]
    def save(self) -> None: ...
    def delete(self) -> None: ...
    def book_payment(self, price_base: float, booking_id: int, booking_type: LinkBookingType = ...) -> None: ...
    def remove_payment(self, booking_id: int, booking_type: UnlinkBookingType = ...) -> None: ...
    @classmethod
    def search(cls, query_string: str | None = None, period: str | None = ..., financial_account_id: str | None = None) -> list[Self]: ...
    @classmethod
    def update_by_id(cls, id: int, data: dict[str, Any]) -> Self: ...
    @classmethod
    def delete_by_id(cls, id: int) -> Self: ...
