"""Shared identity binding for registered weekly reminder ledgers."""

from __future__ import annotations

import hashlib
import json
from dataclasses import dataclass

from .weekly_operations import CustomerIdentityDigest


@dataclass(frozen=True, slots=True)
class WeeklyReminderLedgerBinding:
    schema: str
    customer_identity_digest: CustomerIdentityDigest
    registration_row_digest: str
    registered_binding_digest: str
    canonical_root_identity: tuple[int, int, int, int, int]
    profile_root_identity: tuple[int, int, int, int, int]
    data_root_identity: tuple[int, int, int, int, int]
    sidecar_authority_digest: str
    sidecar_customer_digest: CustomerIdentityDigest
    ledger_identity: tuple[int, int, int, int, int]
    lock_identity: tuple[int, int, int, int, int]
    binding_digest: str


def weekly_reminder_binding_digest(
    value: WeeklyReminderLedgerBinding,
) -> str:
    """Hash every immutable binding field except the digest itself."""
    payload = {
        name: getattr(value, name)
        for name in value.__dataclass_fields__
        if name != "binding_digest"
    }
    encoded = json.dumps(
        payload, sort_keys=True, separators=(",", ":")
    ).encode()
    return hashlib.sha256(encoded).hexdigest()
