package fuchsia.developer.plugin.fidl;

import com.intellij.lang.Language;
import com.intellij.psi.codeStyle.CodeStyleSettingsCustomizable;
import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider;
import org.jetbrains.annotations.NotNull;

public class FidlLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSettingsProvider {

  @NotNull
  @Override
  public Language getLanguage() {
    return fuchsia.developer.plugin.fidl.Language.INSTANCE;
  }

  @Override
  public void customizeSettings(
      @NotNull CodeStyleSettingsCustomizable consumer, @NotNull SettingsType settingsType) {
    if (settingsType == SettingsType.INDENT_SETTINGS) {
      consumer.showAllStandardOptions();
    } else if (settingsType == SettingsType.WRAPPING_AND_BRACES_SETTINGS) {
      consumer.showStandardOptions(
          "RIGHT_MARGIN", "WRAP_ON_TYPING", "KEEP_FIRST_COLUMN_COMMENT", "WRAP_COMMENTS");
    } else if (settingsType == SettingsType.BLANK_LINES_SETTINGS) {
      consumer.showStandardOptions("KEEP_BLANK_LINES_IN_CODE");
    }
  }

  @Override
  public String getCodeSample(@NotNull SettingsType settingsType) {
    return "library qux;\n\n"
        + "const hi string = \"hi\";\n\n"
        + "alias OptionalChannel = zx.handle:<CHANNEL, zx.rights.DUPLICATE, optional>;\n\n"
        + "type Foo = struct {};\n\n"
        + "@foobar\n"
        + "type Foo = struct {\n"
        + "    f1 Bar;\n"
        + "};\n\n"
        + "/// Foo is a protocol\n"
        + "@foobar(\"hi\")\n"
        + "protocol Foo {\n"
        + "    compose foo.bar.baz;\n"
        + "    Foo() -> ();\n"
        + "    Foo(struct {\n"
        + "        f1 uint8;\n"
        + "    }) -> (struct {\n"
        + "        f2 uint8;\n"
        + "    });\n"
        + "};\n\n"
        + "service Qux {\n"
        + "    foo Foo:client_end;\n"
        + "    bar Foo:<client_end>;\n"
        + "};";
  }
}
