package com.amazon.jenkins.ec2fleet;

import hudson.model.Slave;
import hudson.slaves.SlaveComputer;

import javax.annotation.Nonnull;
import javax.annotation.concurrent.ThreadSafe;

/**
 * @see EC2FleetNode
 * @see EC2FleetAutoResubmitComputerLauncher
 */
@ThreadSafe
public class EC2FleetNodeComputer extends SlaveComputer implements EC2FleetCloudAware {

    private final String name;

    private volatile EC2FleetCloud cloud;

    public EC2FleetNodeComputer(final Slave slave, @Nonnull final String name, @Nonnull final EC2FleetCloud cloud) {
        super(slave);
        this.name = name;
        this.cloud = cloud;
    }

    @Override
    public EC2FleetNode getNode() {
        return (EC2FleetNode) super.getNode();
    }

    /**
     * Return label which will represent executor in "Build Executor Status"
     * section of Jenkins UI.
     *
     * @return node display name
     */
    @Nonnull
    @Override
    public String getDisplayName() {
        // in some multi-thread edge cases cloud could be null for some time, just be ok with that
        return (cloud == null ? "unknown fleet" : cloud.getDisplayName()) + " " + name;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void setCloud(@Nonnull final EC2FleetCloud cloud) {
        this.cloud = cloud;
    }

    @Override
    public EC2FleetCloud getCloud() {
        return cloud;
    }

}
