----------------
-- Abbreviations
----------------


local ls = require("luasnip")
local s = ls.snippet
local sn = ls.snippet_node
local t = ls.text_node
local i = ls.insert_node
local f = ls.function_node
local d = ls.dynamic_node
local fmt = require("luasnip.extras.fmt").fmt
local fmta = require("luasnip.extras.fmt").fmta
local rep = require("luasnip.extras").rep
local line_begin = require("luasnip.extras.expand_conditions").line_begin

---------------
-- Environments
---------------


local tex_utils = {}

tex_utils.in_mathzone = function()  -- math context detection
  return vim.fn['vimtex#syntax#in_mathzone']() == 1
end

tex_utils.in_text = function()
  return not tex_utils.in_mathzone()
end

tex_utils.in_comment = function()  -- comment detection
  return vim.fn['vimtex#syntax#in_comment']() == 1
end

tex_utils.in_env = function(name)  -- generic environment detection
  local is_inside = vim.fn['vimtex#env#is_inside'](name)
  return (is_inside[1] > 0 and is_inside[2] > 0)
end

local get_visual = function(args, parent)
  if (#parent.snippet.env.LS_SELECT_RAW > 0) then
    return sn(nil, i(1, parent.snippet.env.LS_SELECT_RAW))
  else
    return sn(nil, i(1))
  end
end


-----------
-- Snippets
-----------


return {


s({trig="notes"},
    fmta(
      [[
        \documentclass[dvipsnames]{article}
        
        \usepackage{float}
        \usepackage{amsmath}
        \usepackage{amsfonts}
        \usepackage{mleftright}
        \usepackage{bm}
        \usepackage{tikz}
        \usepackage{xcolor}
        \usepackage{pgfplots}
        \pgfplotsset{compat=newest}
        
        \title{<>}
        \author{<>}
        \date{<>}
        
        \begin{document}
            \maketitle
        
            <>
        \end{document}
      ]],
      {
          i(1, "Notes"),
          i(2, "Andreas Tsouchlos"),
          i(3, os.date("%d.%m.%y")),
          i(0),
      }
    )
),

s({trig="beg"},
  fmta(
    [[
      \begin{<>}
          <>
      \end{<>}
    ]],
    {
      i(1),
      i(2),
      rep(1),
    }
  )
),

s({trig="sec"},
  fmta(
    [[
      \section{<>}
      \label{sec:<>}
    ]],
    {
      i(1),
      rep(1),
    }
  )
),

s({trig="ssec"},
  fmta(
    [[
      \subsection{<>}
      \label{subsec:<>}
    ]],
    {
      i(1),
      rep(1),
    }
  )
),

s({trig="sssec"},
  fmta(
    [[
      \subsubsection{<>}
      \label{subsubsec:<>}
    ]],
    {
      i(1),
      rep(1),
    }
  )
),

s({trig="csec"},
    fmta(
        [[
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            \section{<>}
            \label{sec:<>}
        ]],
        {
            i(1),
            rep(1),
        }
    )
),

s({trig="cssec"},
    fmta(
        [[
            %%%%%%%%%%%%%%%%
            \subsection{<>}
            \label{subsec:<>}
        ]],
        {
            i(1),
            rep(1),
        }
    )
),

s({trig="csssec"},
    fmta(
        [[
            %%%%%%%%
            \subsubsection{<>}
            \label{subsubsec:<>}
        ]],
        {
            i(1),
            rep(1),
        }
    )
),

-- s({trig="()", wordTrig=false, snippetType="autosnippet"},
--   {
--     t("("),
--     i(1),
--     t(")"),
--     i(0),
--   }
-- ),
-- 
-- s({trig="[]", wordTrig=false, snippetType="autosnippet"},
--   {
--     t("["),
--     i(1),
--     t("]"),
--     i(0),
--   }
-- ),
-- 
-- s({trig="{}", wordTrig=false, snippetType="autosnippet"},
--   {
--     t("{"),
--     i(1),
--     t("}"),
--     i(0),
--   }
-- ),
-- 
-- s({trig="<>", wordTrig=false, snippetType="autosnippet"},
--   {
--     t("<"),
--     i(1),
--     t(">"),
--     i(0),
--   }
-- ),
-- 
-- s({trig="\"\"", wordTrig=false, snippetType="autosnippet"},
--   {
--     t("\""),
--     i(1),
--     t("\""),
--     i(0),
--   }
-- ),
-- 
-- s({trig="''", wordTrig=false, snippetType="autosnippet"},
--   {
--     t("'"),
--     i(1),
--     t("'"),
--     i(0),
--   }
-- ),


}  -- return

