/**
 *  Copyright 2005-2016 Red Hat, Inc.
 *
 *  Red Hat licenses this file to you 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.
 */
package io.fabric8.commands;

import io.fabric8.api.FabricService;
import org.apache.felix.gogo.commands.Argument;
import org.apache.felix.gogo.commands.Command;
import org.apache.felix.gogo.commands.Option;
import io.fabric8.api.FabricRequirements;
import io.fabric8.api.ProfileRequirements;
import io.fabric8.commands.support.ChangeRequirementSupport;

import java.util.List;

@Command(name = RequireProfileSet.FUNCTION_VALUE, scope = RequireProfileSet.SCOPE_VALUE, description = RequireProfileSet.DESCRIPTION, detailedDescription = "classpath:status.txt")
public class RequireProfileSetAction extends ChangeRequirementSupport {

    @Option(name = "--minimum", multiValued = false, required = false, description = "The minimum number of instances expected of this profile in the fabric")
    protected Integer minimumInstances;
    @Option(name = "--maximum", multiValued = false, required = false, description = "The maximum number of instances expected of this profile in the fabric")
    protected Integer maximumInstances;
    @Option(name = "--dependsOn", multiValued = true, required = false, description = "The profile IDs which need to be provisioned before this profile. To specify multiple profiles, use this flag multiple times.")
    protected List<String> dependentProfiles;
    @Option(name = "--version", multiValued = false, required = false, description = "The version to operate onto. Defaults to the default version.")
    protected String v;

    @Argument(index = 0, required = true, description = "Profile ID")
    protected String profile;

    RequireProfileSetAction(FabricService fabricService) {
        super(fabricService);
    }

    @Override
    protected boolean updateRequirements(FabricRequirements requirements) {
        if(v != null){
            setVersion(v);
        } else {
            setVersion(getFabricService().getDefaultVersionId());
        }
        ProfileRequirements requirement = new ProfileRequirements(profile);
        if (minimumInstances != null) {
            requirement.setMinimumInstances(minimumInstances);
        }
        if (maximumInstances != null) {
            requirement.setMaximumInstances(maximumInstances);
        }
        if (dependentProfiles != null) {
            requirement.setDependentProfiles(dependentProfiles);
        }
        requirements.addOrUpdateProfileRequirements(requirement);
        return true;
    }
}
