/**
 * Copyright (C) 2009 - 2021 <a href="https://www.wudsn.com" target="_top">Peter Dell</a>
 *
 * This file is part of WUDSN IDE.
 * 
 * WUDSN IDE is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 * 
 * WUDSN IDE is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with WUDSN IDE.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.wudsn.ide.lng.compiler;

import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import com.wudsn.ide.base.common.FileUtility;
import com.wudsn.ide.base.common.StringUtility;

/**
 * Compiler help access.
 * 
 * @author Peter Dell
 *
 * @since 1.7.2
 */
public final class CompilerHelp {
	
	public static class HelpDocument {
		public String path;
		public String language;
		public File file;
		public URI uri;
	}

	public static List<HelpDocument> getHelpDocuments(String helpDocumentPaths, String compilerExecutablePath) {
		List<HelpDocument> helpDocuments = new ArrayList<CompilerHelp.HelpDocument>();

		StringTokenizer tokenizer = new StringTokenizer(helpDocumentPaths, ",");
		while (tokenizer.hasMoreTokens()) {
			String helpFilePath = tokenizer.nextToken().trim();
			String helpFileLanguage = "";
			int index = helpFilePath.lastIndexOf("(");
			if (index > 0) {
				helpFileLanguage = helpFilePath.substring(index + 1, index + 3);
				helpFilePath = helpFilePath.substring(0, index - 1).trim();
			}
			HelpDocument helpDocument = new HelpDocument();
			helpDocument.path = helpFilePath;
			helpDocument.language = helpFileLanguage;

			// Relative paths are local files.
			if (helpFilePath.startsWith(".") && StringUtility.isSpecified(compilerExecutablePath)) {
				helpDocument.file = FileUtility
						.getCanonicalFile(new File(new File(compilerExecutablePath).getParent(), helpFilePath));
			} else {
				try {
					helpDocument.uri = new URI(helpFilePath);
				} catch (URISyntaxException ex) {
					throw new RuntimeException("Invalid URI for '" + helpFilePath + "' help file path", ex);
				}
			}
			helpDocuments.add(helpDocument);
		}
		return helpDocuments;
	}
}