/**
 *  Copyright (C) 2008 Progress Software, Inc. All rights reserved.
 *  http://fusesource.com
 *
 *  The software in this package is published under the terms of the AGPL license
 *  a copy of which has been included with this distribution in the license.txt file.
 */
package org.fusesource.cloudmix.agent.jbi;

import java.net.URI;
import java.net.URISyntaxException;

import org.fusesource.cloudmix.agent.AgentPoller;
import org.fusesource.cloudmix.agent.RestGridClient;

public class Agent implements AgentMBean {

    private JBIInstallerAgent agent;
    private RestGridClient gridClient;
    private AgentPoller poller;

    public String getProfile() {
        return agent.getProfile();
    }

    public Agent(JBIInstallerAgent agent, RestGridClient gridClient, AgentPoller poller) {
        this.agent = agent;
        this.gridClient = gridClient;
        this.poller = poller;
    }

    public String getAgentLink() {
        return agent.getAgentLink();
    }

    public String getContainerType() {
        return agent.getContainerType();
    }

    public String getCurrentFeatures() {
        // TODO: add list of bundles for each feature.
        StringBuilder sb = new StringBuilder();
        boolean first = true;
        for (String feature : agent.getAgentDetails().getCurrentFeatures()) {
            if (first) {
                sb.append(feature);
                first = false;
            } else {
                sb.append(", ").append(feature);
            }
        }
        return sb.toString();
    }

    public String getHostName() {
        return agent.getHostName();
    }

    public long getInitialPollingDelay() {
        return poller.getInitialPollingDelay();
    }

    public int getMaxFeatures() {
        return agent.getMaxFeatures();
    }

    public String getOs() {
        return agent.getAgentDetails().getOs();
    }

    public int getPid() {
        return agent.getAgentDetails().getPid();
    }

    public long getPollingPeriod() {
        return poller.getPollingPeriod();
    }

    
    public URI getRepositoryUri() {
        try {
            return gridClient.getRootUri();
        } catch (URISyntaxException e) {
            return null;
        }
    }

    public String getSupportPackageTypes() {
        StringBuilder sb = new StringBuilder();
        boolean first = true;
        for (String t : agent.getSupportPackageTypes()) {
            if (first) {
                sb.append(t);
                first = false;
            } else {
                sb.append(", ").append(t);
            }
        }
        return sb.toString();
    }

}
