/*
* Copyright (c) , Huawei Technologies Co., Ltd. 2025-2025 .All rights reserved.
 */
#ifndef GRAPHLINEFACTORY_H
#define GRAPHLINEFACTORY_H
#include "GraphLine.h"
#include "LineOpFactory.h"

class GraphLineFactory
{
public:
    GraphLine BuildGraphLine(LineType type, std::unordered_map<LineType, std::shared_ptr<LineOp>>& lineOpConfigMap)
    {
        GraphLine graphLine;
        switch (type) {
            case LineType::NORMAL:
                {
                    graphLine.AddLineOp(lineOpConfigMap.at(LineType::NORMAL)->Clone());
                    graphLine.AddLineOp(lineOpConfigMap.at(LineType::SAMPLE)->Clone());
                    break;
                }
            case LineType::NORMAL_SMOOTHING:
            case LineType::SMOOTHING:
                {
                    graphLine.AddLineOp(lineOpConfigMap.at(LineType::SMOOTHING)->Clone());
                    graphLine.AddLineOp(lineOpConfigMap.at(LineType::SAMPLE)->Clone());
                    break;
                }
            case LineType::TOKEN:
                {
                    graphLine.AddLineOp(lineOpConfigMap.at(LineType::NORMAL)->Clone());
                    graphLine.AddLineOp(lineOpConfigMap.at(LineType::SAMPLE)->Clone());
                    graphLine.AddLineOp(lineOpConfigMap.at(LineType::TOKEN)->Clone());
                    break;
                }
            case LineType::TOKEN_SMOOTHING:
                {
                    graphLine.AddLineOp(lineOpConfigMap.at(LineType::SMOOTHING)->Clone());
                    graphLine.AddLineOp(lineOpConfigMap.at(LineType::SAMPLE)->Clone());
                    graphLine.AddLineOp(lineOpConfigMap.at(LineType::TOKEN)->Clone());
                    break;
                }
            case LineType::SAMPLE:
            case LineType::UNKNOWN:
                break;
        }
        return graphLine;
    }
};
#endif //GRAPHLINEFACTORY_H