{ config, lib, ... }:
lib.nixvim.plugins.mkNeovimPlugin {
  name = "blink-cmp-copilot";
  package = "blink-cmp-copilot";

  maintainers = [ lib.maintainers.HeitorAugustoLN ];

  description = ''
    Copilot suggestions source for the blink-cmp.

    ---

    This plugin should be configured through blink-cmp's source settings.

    For example:

    ```nix
    plugins.blink-cmp = {
      enable = true;
      settings.sources = {
        copilot = {
          async = true;
          module = "blink-cmp-copilot";
          name = "copilot";
          score_offset = 100;
        };
      };
    };
    ```

    And then you can add it as a source for blink-cmp:

    ```nix
    plugins.blink-cmp = {
      enable = true;
      settings.sources.default = [
        "lsp"
        "path"
        "luasnip"
        "buffer"
        "copilot"
      ];
    };
    ```
  '';

  callSetup = false;
  hasLuaConfig = false;
  hasSettings = false;

  extraConfig = {
    warnings =
      let
        copilot-lua-cfg = config.plugins.copilot-lua.settings;
      in
      lib.nixvim.mkWarnings "plugins.blink-cmp-copilot" [
        {
          when = copilot-lua-cfg.suggestion.enabled == true;
          message = ''
            It is recommended to disable copilot's `suggestion` module, as it can interfere with
            completions properly appearing in blink-cmp-copilot.
          '';
        }
        {
          when = copilot-lua-cfg.panel.enabled == true;
          message = ''
            It is recommended to disable copilot's `panel` module, as it can interfere with completions
            properly appearing in blink-cmp-copilot.
          '';
        }
      ];

    plugins.copilot-lua.enable = lib.mkDefault true;
  };
}
