//
//  InputPositionViewFactory.swift
//  SwiftQuantumComputing
//
//  Created by Enrique de la Torre on 21/11/2020.
//  Copyright © 2020 Enrique de la Torre. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

import Foundation

// MARK: - Protocol definition

protocol InputPositionViewFactory {
    func makePositionViewFactory(index: Int,
                                 inputs: [Int],
                                 controls: [Int]) -> AnyPositionViewFactory
}

// MARK: - InputPositionViewFactory default implementations

extension InputPositionViewFactory where Self: SimpleInputPositionViewFactory {
    func makePositionViewFactory(index: Int,
                                 inputs: [Int],
                                 controls: [Int]) -> AnyPositionViewFactory {
        if controls.isEmpty {
            return makePositionView(connected: .none)
        }

        if index < controls.min()! {
            return makePositionView(connected: .up)
        }

        if index > controls.max()! {
            return makePositionView(connected: .down)
        }

        return makePositionView(connected: .both)
    }
}
