//
//  AssignmentDynamcFactory.cpp
//  assignment-client/src/
//
//  Created by Seth Alves on 2015-6-19
//  Copyright 2015 High Fidelity, Inc.
//
//  Distributed under the Apache License, Version 2.0.
//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//

#include "AssignmentDynamicFactory.h"


EntityDynamicPointer assignmentDynamicFactory(EntityDynamicType type, const QUuid& id, EntityItemPointer ownerEntity) {
    return EntityDynamicPointer(new AssignmentDynamic(type, id, ownerEntity));
}

EntityDynamicPointer AssignmentDynamicFactory::factory(EntityDynamicType type,
                                                     const QUuid& id,
                                                     EntityItemPointer ownerEntity,
                                                     QVariantMap arguments) {
    EntityDynamicPointer dynamic = assignmentDynamicFactory(type, id, ownerEntity);
    if (dynamic) {
        bool ok = dynamic->updateArguments(arguments);
        if (ok) {
            return dynamic;
        }
    }
    return nullptr;
}


EntityDynamicPointer AssignmentDynamicFactory::factoryBA(EntityItemPointer ownerEntity, QByteArray data) {
    QDataStream serializedDynamicDataStream(data);
    EntityDynamicType type;
    QUuid id;

    serializedDynamicDataStream >> type;
    serializedDynamicDataStream >> id;

    EntityDynamicPointer dynamic = assignmentDynamicFactory(type, id, ownerEntity);

    if (dynamic) {
        dynamic->deserialize(data);
    }
    return dynamic;
}