import os
import base64
from django.db import models


class Key(models.Model):
    code = models.CharField(max_length=100, default='')
    _lockbox_key = models.CharField(max_length=1000, db_column='lockbox_key', default='')

    @property
    def lockbox_key(self):
        """Return decoded key."""
        if not self._lockbox_key:
            return ""
        try:
            decoded_bytes = base64.b64decode(self._lockbox_key.encode())
            return decoded_bytes.decode()
        except Exception:
            return "Invalid Key"

    @lockbox_key.setter
    def lockbox_key(self, value):
        """Encode and set key."""
        if value:
            encoded_bytes = base64.b64encode(value.encode())
            self._lockbox_key = encoded_bytes.decode()

    def save(self, *args, **kwargs):
        # Prevent double encoding
        try:
            decoded = base64.b64decode(self._lockbox_key.encode()).decode()
            # If decoding successful, it means key is already encoded
        except Exception:
            self.lockbox_key = self._lockbox_key  # encode it
        super().save(*args, **kwargs)

    def __str__(self):
        return f"{self.code}"
