from cryptography.fernet import Fernet

from rvpc.auth.types import DecryptedContent
from rvpc.models.models import CardContent


def encrypt_field(user_key: bytes, plaintext: str) -> bytes:
    f = Fernet(user_key)
    return f.encrypt(plaintext.encode())


def decrypt_field(user_key: bytes, ciphertext: bytes) -> str:
    f = Fernet(user_key)
    return f.decrypt(ciphertext).decode()


def decrypt_content(content: CardContent, user_key: bytes) -> DecryptedContent:
    return DecryptedContent(
        sender=decrypt_field(user_key=user_key, ciphertext=content.from_enc),
        recipient=decrypt_field(user_key=user_key, ciphertext=content.to_enc),
        msg=decrypt_field(user_key=user_key, ciphertext=content.msg_enc),
    )
