-- C++ LuaSnip Snippets

local luasnip = require('luasnip')
luasnip.filetype_extend('cpp', { 'c' })
local snip = luasnip.snippet
local text = luasnip.text_node
local ins = luasnip.insert_node
local dyn = luasnip.dynamic_node
local node = luasnip.snippet_node
local key = require("luasnip.nodes.key_indexer").new_key

local snippets = {

  snip('for', {
    text('for ('),
    ins(1, 'auto'),
    text(' '),
    ins(2, 'index'),
    text(' '),
    ins(3, '='),
    dyn(4, function(args)
      local choice = args[2][1]
      if choice == '=' then -- index based for loop
        local var = args[1][1]
        return node(nil, {
          text(' '),
          ins(1, '0'),
          text('; ' .. var .. ' < '),
          ins(2, 'count'),
          text('; '),
          ins(3, var .. '++'),
        })
      elseif choice == ':' then -- range based for loop
        return node(nil, {
          text(' '),
          ins(1, 'container')
        })
      end
      return node(nil, {})
    end, { 2, 3 }, key('var')),
    text({ ') {', '\t' }),
    ins(0, ''),
    text({ '', '}' })
  }),

}

return snippets