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

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

  s({ trig = "#!", desc = "shebang" }, t("#!/usr/bin/env fish")),

  s(
    { trig = "if", desc = "if ... end" },
    fmt(
      [[
        if {}
            {}
        end
      ]],
      { i(1), i(0) }
    )
  ),

  s(
    { trig = "elif", desc = "else if ..." },
    fmt(
      [[
        else if {}
            {}
      ]],
      { i(1), i(0) }
    )
  ),

  s(
    { trig = "fori", desc = "for ... in ... end" },
    fmt(
      [[
        for {} in {}
            {}
        end
      ]],
      { i(1), i(2), i(0) }
    )
  ),

  s(
    { trig = "wh", desc = "while ... end" },
    fmt(
      [[
        while {}
            {}
        end
      ]],
      { i(1), i(0) }
    )
  ),

  s(
    { trig = "wht", desc = "while true ... end" },
    fmt(
      [[
        while true
            {}
        end
      ]],
      { i(0) }
    )
  ),

  s(
    { trig = "sw", desc = "switch ... case ... end" },
    fmt(
      [[
        switch {}
            case {}
                {}
        end
      ]],
      { i(1), i(2), i(0) }
    )
  ),

  s(
    { trig = "func", desc = "function ... end" },
    fmt(
      [[
        function {}
            {}
        end
      ]],
      { i(1), i(0) }
    )
  ),

  s({ trig = "dn", desc = "&>/dev/null" }, t("&>/dev/null")),

  s(
    { trig = "abbr", desc = "abbr -a ... --position ..." },
    fmt('abbr -a {} --position {} "{}"', { i(1), i(2, "command"), i(3) })
  ),
}