package actdoc;

import act.Act;
import act.cli.Command;
import act.cli.Required;
import act.inject.DefaultValue;
import act.inject.util.LoadResource;
import act.job.OnAppStart;
import org.osgl.exception.UnexpectedException;
import org.osgl.inject.annotation.Configuration;

import java.io.File;
import java.util.List;
import javax.inject.Inject;

@SuppressWarnings("unused")
public class Processor {

    @Configuration("doc.base")
    private String base;

    @Configuration("workspace")
    private String workspace;

    @LoadResource("chapters.list")
    private List<String> chapters;

    @Inject
    private Tags tags;

    public File base(String lang) {
        return new File(base, lang);
    }

    public File workspace() {
        return new File(workspace);
    }

    public List<String> chapters() {
        return chapters;
    }

    public String processTag(String line) {
        return tags.substitude(line);
    }

    @OnAppStart
    public void ensureWorkspace() {
        File file = workspace();
        if (!file.exists()) {
            if (!file.mkdir()) {
                throw new UnexpectedException("Workspace not ready for use: " + file.getAbsolutePath());
            }
        }
    }

    @Command(name = "process", help = "process a file")
    public void process(@Required("specify language suffix") @DefaultValue("cn") String lang) {
        new Book(lang, this).process();
    }

    public static void main(String[] args) throws Exception {
        Act.start();
    }

}