/* This code is part of Freenet. It is distributed under the GNU General
 * Public License, version 2 (or at your option any later version). See
 * http://www.gnu.org/ for further details of the GPL. */
package freenet.client.filter;

import java.util.LinkedList;
import java.util.List;

import freenet.client.FetchException;
import freenet.client.FetchException.FetchExceptionMode;
import freenet.l10n.NodeL10n;
import freenet.support.HTMLEncoder;

public class KnownUnsafeContentTypeException extends UnsafeContentTypeException {
	private static final long serialVersionUID = -1;
	FilterMIMEType type;
	
	public KnownUnsafeContentTypeException(FilterMIMEType type) {
		this.type = type;
	}
	
	
	@Override
	public String getMessage() {
		StringBuilder sb = new StringBuilder();
		sb.append(l10n("knownUnsafe"));
		sb.append(l10n("noFilter"));
		
		return sb.toString();
	}

	@Override
	public List<String> details() {
		List<String> details = new LinkedList<String>();
		if(type.dangerousInlines) details.add(l10n("dangerousInlinesLabel")+l10n("dangerousInlines"));
		if(type.dangerousLinks) details.add(l10n("dangerousLinksLabel")+l10n("dangerousLinks"));
		if(type.dangerousScripting) details.add(l10n("dangerousScriptsLabel")+l10n("dangerousScripts"));
		if(type.dangerousScripting) details.add(l10n("dangerousMetadataLabel")+l10n("dangerousMetadata"));
		return details;
	}

	@Override
	public String getHTMLEncodedTitle() {
		return l10n("title", "type", HTMLEncoder.encode(type.primaryMimeType));
	}

	@Override
	public String getRawTitle() {
		return l10n("title", "type", type.primaryMimeType);
	}
	
	private static String l10n(String key) {
		return NodeL10n.getBase().getString("KnownUnsafeContentTypeException."+key);
	}

	private static String l10n(String key, String pattern, String value) {
		return NodeL10n.getBase().getString("KnownUnsafeContentTypeException."+key, pattern, value);
	}

	@Override
	public FetchExceptionMode getFetchErrorCode() {
		return FetchExceptionMode.CONTENT_VALIDATION_BAD_MIME;
	}

}
