from marshmallow import post_load
from marshmallow.fields import Boolean, DateTime, Float, Integer, validate
from marshmallow.validate import Range

from ereuse_devicehub.marshmallow import NestedOn
from ereuse_devicehub.resources.documents import models as m
from ereuse_devicehub.resources.schemas import Thing
from ereuse_devicehub.resources.tradedocument.models import TradeDocument
from ereuse_devicehub.teal.marshmallow import URL, SanitizedStr


class DataWipeDocument(Thing):
    __doc__ = m.DataWipeDocument.__doc__
    id = Integer(description=m.DataWipeDocument.id.comment, dump_only=True)
    url = URL(required=False, description=m.DataWipeDocument.url.comment)
    success = Boolean(
        required=False, default=False, description=m.DataWipeDocument.success.comment
    )
    software = SanitizedStr(description=m.DataWipeDocument.software.comment)
    date = DateTime(
        data_key='endTime', required=False, description=m.DataWipeDocument.date.comment
    )
    id_document = SanitizedStr(
        data_key='documentId',
        required=False,
        default='',
        description=m.DataWipeDocument.id_document.comment,
    )
    file_name = SanitizedStr(
        data_key='filename',
        default='',
        description=m.DataWipeDocument.file_name.comment,
        validate=validate.Length(max=100),
    )
    file_hash = SanitizedStr(
        data_key='hash',
        default='',
        description=m.DataWipeDocument.file_hash.comment,
        validate=validate.Length(max=64),
    )

    @post_load
    def get_trade_document(self, data):
        data['document_type'] = 'DataWipeDocument'