"""Mutation-free opener for an existing weekly reminder ledger."""

from __future__ import annotations

import os
from dataclasses import replace
from typing import Final

from .weekly_operations import WeeklyOperationsConflict
from .weekly_operations_customer_authority import CanonicalCheckinCustomerAuthority
from .weekly_operations_store import WeeklyOperationsStore
from .weekly_reminder_ledger_authority import (
    WeeklyReminderLedgerAuthority,
)
from .weekly_reminder_ledger_binding import (
    WeeklyReminderLedgerBinding,
    weekly_reminder_binding_digest,
)
from .weekly_reminder_ledger_identity import (
    canonical_root_identity,
    directory_identity,
    file_identity,
)

_SCHEMA: Final = "weekly-reminder-ledger-authority-v2"
_DIR_FLAGS: Final = os.O_RDONLY | os.O_DIRECTORY | os.O_NOFOLLOW | os.O_CLOEXEC


def _open_regular(parent: int, name: str) -> int:
    return os.open(
        name,
        os.O_RDWR | os.O_NOFOLLOW | os.O_NONBLOCK | os.O_CLOEXEC,
        dir_fd=parent,
    )


def open_registered_weekly_reminder_ledger_authority(
    source: CanonicalCheckinCustomerAuthority,
    store: WeeklyOperationsStore,
) -> WeeklyReminderLedgerAuthority:
    """Open exact existing descriptors without creation or migration."""
    source.verify()
    registered = source.registered_binding
    if (
        source.customer_identity_digest != store.customer_identity_digest
        or registered.authority_binding_digest != store.authority_binding_digest
    ):
        raise WeeklyOperationsConflict("weekly reminder registered authorities disagree")
    opened: list[int] = []
    try:
        customer_fd = source.duplicate_registered_root_descriptor()
        opened.append(customer_fd)
        customers_fd = os.open("..", _DIR_FLAGS, dir_fd=customer_fd)
        opened.append(customers_fd)
        data_fd = os.open("..", _DIR_FLAGS, dir_fd=customers_fd)
        opened.append(data_fd)
        profile_fd = os.open("..", _DIR_FLAGS, dir_fd=data_fd)
        opened.append(profile_fd)
        ledger_fd = _open_regular(data_fd, "scheduled-deliveries.jsonl")
        opened.append(ledger_fd)
        lock_fd = _open_regular(data_fd, ".scheduled-deliveries.lock")
        opened.append(lock_fd)
        claims = os.stat(
            "customer-schedule-claims", dir_fd=data_fd, follow_symlinks=False
        )
        _ = directory_identity(claims)
        binding = WeeklyReminderLedgerBinding(
            _SCHEMA,
            source.customer_identity_digest,
            registered.registration_row_digest,
            registered.binding_digest,
            canonical_root_identity(source),
            directory_identity(os.fstat(profile_fd)),
            directory_identity(os.fstat(data_fd)),
            store.authority_binding_digest,
            store.customer_identity_digest,
            file_identity(os.fstat(ledger_fd)),
            file_identity(os.fstat(lock_fd)),
            "",
        )
        binding = replace(
            binding,
            binding_digest=weekly_reminder_binding_digest(binding),
        )
        authority = WeeklyReminderLedgerAuthority(
            binding, source, store, profile_fd, data_fd, ledger_fd, lock_fd
        )
        os.close(customers_fd)
        os.close(customer_fd)
        opened.clear()
        return authority
    except (OSError, WeeklyOperationsConflict) as error:
        for descriptor in reversed(opened):
            os.close(descriptor)
        raise WeeklyOperationsConflict(
            "registered weekly reminder ledger open failed"
        ) from error
