package com.github.cukedoctor.jenkins;

import com.github.cukedoctor.jenkins.model.CukedoctorBuild;
import hudson.Extension;
import hudson.model.Action;
import hudson.model.Job;
import hudson.model.ProminentProjectAction;
import hudson.model.Run;
import jenkins.model.TransientActionFactory;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

public class CukedoctorProjectAction extends CukedoctorBaseAction implements ProminentProjectAction {

    private final transient Job<?, ?> job;

    private String jobName;

    private final List<CukedoctorBuild> cukedoctorBuilds;

    public CukedoctorProjectAction(Job<?, ?> job, List<CukedoctorBuild> cukedoctorBuilds) {
        this.job = job;
        this.cukedoctorBuilds = cukedoctorBuilds;
    }

    public String job() {
        if (jobName == null) {
            jobName = job.getName();
        }
        return jobName;
    }


    protected String getTitle() {
        return this.job.getDisplayName();
    }


    public List<CukedoctorBuild> getBuilds() {
        return cukedoctorBuilds;
    }


    @Extension
    public static class CukedoctorActionFactory extends TransientActionFactory<Job<?, ?>> {

        @Override
        public Collection<? extends Action> createFor(Job<?, ?> j) {
            List<CukedoctorBuild> cukedoctorBuilds = new ArrayList<>();

            //collects the list of builds that published living docs to show on the documentation history page
            if (j.getBuilds() != null && !j.getBuilds().isEmpty()) {
                for (Run<?, ?> build : j.getBuilds()) {
                    CukedoctorBuildAction cukedoctorBuildAction = build.getAction(CukedoctorBuildAction.class);
                    if (cukedoctorBuildAction != null) {
                        cukedoctorBuilds.add(cukedoctorBuildAction.getCukedoctorBuild());
                    }
                }
            }
            if (cukedoctorBuilds.isEmpty()) {
                return Collections.emptyList();
            }
            return Collections.singleton(new CukedoctorProjectAction(j, cukedoctorBuilds));
        }

        @Override
        public Class type() {
            return Job.class;
        }
    }


}