local ls = require("luasnip")
local s = ls.snippet
local i = ls.insert_node
local f = ls.function_node
local fmta = require("luasnip.extras.fmt").fmta
local rep = require("luasnip.extras").rep
local fill = require("snippets.helpers").fill

return {
  s(
    { trig = "dc", desc = "divider comment" },
    f(fill, {}, { user_args = { "#%- " } })
  ),

  s(
    { trig = "mexpr", desc = "Basic module expression" },
    fmta(
      [[
        { <>... }:
        {
          <>
        }
      ]],
      { i(1), i(0) }
    )
  ),

  s(
    { trig = "ovr", desc = "Override" },
    fmta(
      [[
        <> = prev.<>.override {
          <>
        };
      ]],
      { i(1, "pkg"), rep(1), i(0) }
    )
  ),

  s(
    { trig = "ovra", desc = "OverrideAttrs" },
    fmta(
      [[
        <> = prev.<>.overrideAttrs (old: {
          <>
        });
      ]],
      { i(1, "pkg"), rep(1), i(0) }
    )
  ),

  s(
    { trig = "hpkg", desc = "home.packages list" },
    fmta(
      [[
        home.packages = with pkgs; [
          <>
        ];<>
      ]],
      { i(1), i(0) }
    )
  ),

  s(
    { trig = "shm", desc = "Snowfall lib home module" },
    fmta(
      [[
        {
          lib,
          config,<>
          ...
        }:
        let
          inherit (lib) mkEnableOption mkIf;<>

          cfg = config.marleyos.<>.<>;<>
        in
        {
          options.marleyos.<>.<>.enable = mkEnableOption "<>";

          config = mkIf cfg.enable {
            <>
          };
        }
      ]],
      {
        i(1), -- extra args
        i(2, { "", "  inherit (lib.marleyos) enabled;" }),
        i(3), -- group
        i(4), -- mod
        i(5, { "", "  inherit (config.marleyos.theme) colors;" }),
        rep(3), -- group
        rep(4), -- mod
        rep(4), -- mod
        i(0), -- end
      }
    )
  ),

  s(
    { trig = "ith", desc = "Inherit theme definition" },
    fmta(
      [[
        inherit (config.marleyos.theme) colors;<>
      ]],
      { i(0) }
    )
  ),

  s(
    { trig = "erpth", desc = "Enable rose-pine theme module option" },
    fmta(
      [[
        rose-pine = mkIf colors.isRosePine enabled;<>
      ]],
      { i(0) }
    )
  ),

  s(
    { trig = "sov", desc = "Snowfall lib overlay" },
    fmta(
      [[
        <>: final: prev: {
          <>
        }
      ]],
      { i(1, "_"), i(0) }
    )
  ),

  s(
    { trig = "nvk", desc = "NixVim keymap attr set" },
    fmta(
      [[
        {
          mode = [ "<>"<> ];
          key = "<>";
          action = "<>";
          options = {
            desc = "<>";<>
          };
        }<>
      ]],
      { i(1), i(2), i(3), i(4), i(5), i(6), i(0) }
    )
  ),
}