package io.noties.markwon.html.jsoup.nodes;

/**
 * A {@code <!DOCTYPE>} node.
 */
public class DocumentType /*extends LeafNode*/ {
    // todo needs a bit of a chunky cleanup. this level of detail isn't needed
    public static final String PUBLIC_KEY = "PUBLIC";
    public static final String SYSTEM_KEY = "SYSTEM";
//    private static final String NAME = "name";
//    private static final String PUB_SYS_KEY = "pubSysKey"; // PUBLIC or SYSTEM
//    private static final String PUBLIC_ID = "publicId";
//    private static final String SYSTEM_ID = "systemId";
    // todo: quirk mode from publicId and systemId

//    /**
//     * Create a new doctype element.
//     * @param name the doctype's name
//     * @param publicId the doctype's public ID
//     * @param systemId the doctype's system ID
//     */
//    public DocumentType(String name, String publicId, String systemId) {
//        Validate.notNull(name);
//        Validate.notNull(publicId);
//        Validate.notNull(systemId);
//        attr(NAME, name);
//        attr(PUBLIC_ID, publicId);
//        if (has(PUBLIC_ID)) {
//            attr(PUB_SYS_KEY, PUBLIC_KEY);
//        }
//        attr(SYSTEM_ID, systemId);
//    }
//
//    /**
//     * Create a new doctype element.
//     * @param name the doctype's name
//     * @param publicId the doctype's public ID
//     * @param systemId the doctype's system ID
//     * @param baseUri unused
//     * @deprecated
//     */
//    public DocumentType(String name, String publicId, String systemId, String baseUri) {
//        attr(NAME, name);
//        attr(PUBLIC_ID, publicId);
//        if (has(PUBLIC_ID)) {
//            attr(PUB_SYS_KEY, PUBLIC_KEY);
//        }
//        attr(SYSTEM_ID, systemId);
//    }
//
//    /**
//     * Create a new doctype element.
//     * @param name the doctype's name
//     * @param publicId the doctype's public ID
//     * @param systemId the doctype's system ID
//     * @param baseUri unused
//     * @deprecated
//     */
//    public DocumentType(String name, String pubSysKey, String publicId, String systemId, String baseUri) {
//        attr(NAME, name);
//        if (pubSysKey != null) {
//            attr(PUB_SYS_KEY, pubSysKey);
//        }
//        attr(PUBLIC_ID, publicId);
//        attr(SYSTEM_ID, systemId);
//    }
//    public void setPubSysKey(String value) {
//        if (value != null)
//            attr(PUB_SYS_KEY, value);
//    }
//
//    @Override
//    public String nodeName() {
//        return "#doctype";
//    }
//
//    @Override
//    void outerHtmlHead(Appendable accum, int depth, Document.OutputSettings out) throws IOException {
//        if (out.syntax() == Syntax.html && !has(PUBLIC_ID) && !has(SYSTEM_ID)) {
//            // looks like a html5 doctype, go lowercase for aesthetics
//            accum.append("<!doctype");
//        } else {
//            accum.append("<!DOCTYPE");
//        }
//        if (has(NAME))
//            accum.append(" ").append(attr(NAME));
//        if (has(PUB_SYS_KEY))
//            accum.append(" ").append(attr(PUB_SYS_KEY));
//        if (has(PUBLIC_ID))
//            accum.append(" \"").append(attr(PUBLIC_ID)).append('"');
//        if (has(SYSTEM_ID))
//            accum.append(" \"").append(attr(SYSTEM_ID)).append('"');
//        accum.append('>');
//    }
//
//    @Override
//    void outerHtmlTail(Appendable accum, int depth, Document.OutputSettings out) {
//    }
//
//    private boolean has(final String attribute) {
//        return !StringUtil.isBlank(attr(attribute));
//    }
}

