import time
from dataclasses import dataclass


@dataclass
class Delegation:
    delegator_pubkey: str
    delegatee_pubkey: str
    event_kind: int
    duration_secs: int = 30 * 24 * 60  # default to 30 days
    signature: str = None  # set in PrivateKey.sign_delegation

    @property
    def expires(self) -> int:
        return int(time.time()) + self.duration_secs

    @property
    def conditions(self) -> str:
        return f"kind={self.event_kind}&created_at<{self.expires}"

    @property
    def delegation_token(self) -> str:
        return f"nostr:delegation:{self.delegatee_pubkey}:{self.conditions}"

    def get_tag(self) -> "list[str]":
        """Called by Event."""
        return [
            "delegation",
            self.delegator_pubkey,
            self.conditions,
            self.signature,
        ]
