from marshmallow.fields import DateTime, Float, Integer, validate

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

# from marshmallow import ValidationError, validates_schema


# from ereuse_devicehub.resources.lot import schemas as s_lot


class TradeDocument(Thing):
    __doc__ = m.TradeDocument.__doc__
    id = Integer(description=m.TradeDocument.id.comment, dump_only=True)
    date = DateTime(required=False, description=m.TradeDocument.date.comment)
    id_document = SanitizedStr(
        data_key='documentId',
        default='',
        description=m.TradeDocument.id_document.comment,
    )
    description = SanitizedStr(
        default='',
        description=m.TradeDocument.description.comment,
        validate=validate.Length(max=500),
    )
    file_name = SanitizedStr(
        data_key='filename',
        default='',
        description=m.TradeDocument.file_name.comment,
        validate=validate.Length(max=100),
    )
    file_hash = SanitizedStr(
        data_key='hash',
        default='',
        description=m.TradeDocument.file_hash.comment,
        validate=validate.Length(max=64),
    )
    url = URL(description=m.TradeDocument.url.comment)
    lot = NestedOn('Lot', only_query='id', description=m.TradeDocument.lot.__doc__)
    trading = SanitizedStr(dump_only=True, description='')
    weight = Float(required=False, description=m.TradeDocument.weight.comment)
    total_weight = Float(required=False, description=m.TradeDocument.weight.comment)