local M = {}

local default_config = {
    typstarRoot = nil, -- typstar installation location required to use default drawing templates (usually determined automatically)
    anki = {
        typstarAnkiCmd = 'typstar-anki',
        typstCmd = 'typst',
        ankiUrl = 'http://127.0.0.1:8765',
        ankiKey = nil,
    },
    excalidraw = {
        assetsDir = 'assets',
        filename = 'drawing-%Y-%m-%d-%H-%M-%S',
        fileExtension = '.excalidraw.md',
        fileExtensionInserted = '.excalidraw.svg',
        uriOpenCommand = 'xdg-open', -- set depending on OS; try setting it to "obsidian" directly if you encounter problems and have it in your PATH
        templatePath = {},
    },
    rnote = {
        assetsDir = 'assets',
        -- can be modified to e.g. export full pages; default is to try to export strokes only and otherwise export the entire document
        exportCommand = 'rnote-cli export selection --no-background --no-pattern --on-conflict overwrite --output-file %s all %s || rnote-cli export doc --no-background --no-pattern --on-conflict overwrite --output-file %s %s',
        filename = 'drawing-%Y-%m-%d-%H-%M-%S',
        fileExtension = '.rnote',
        fileExtensionInserted = '.rnote.svg', -- valid rnote export type
        uriOpenCommand = 'xdg-open', -- see comment above for excalidraw
        templatePath = {},
    },
    snippets = {
        enable = true,
        add_undo_breakpoints = true,
        modules = { -- enable modules from ./snippets
            'letters',
            'math',
            'matrix',
            'markup',
            'visual',
        },
        exclude = {}, -- list of triggers to exclude
        visual_disable = {}, -- visual.lua: list of triggers to exclude from visual selection mode
        visual_disable_normal = {}, -- visual.lua: list of triggers to exclude from normal snippet mode
        visual_disable_postfix = {}, -- visual.lua: list of triggers to exclude from postfix snippet mode
    },
}

function M.merge_config(args)
    M.config = vim.tbl_deep_extend('force', default_config, args or {})
    M.config.typstarRoot = M.config.typstarRoot
        or debug.getinfo(1).source:match('^@(.*)/lua/typstar/config%.lua$')
        or '~/typstar'
    vim.list_extend(M.config.excalidraw.templatePath, {
        { '%.excalidraw%.md$', M.config.typstarRoot .. '/res/excalidraw_template.excalidraw.md' },
    })
    vim.list_extend(M.config.rnote.templatePath, {
        { '%.rnote$', M.config.typstarRoot .. '/res/rnote_template.rnote' },
    })
end

M.merge_config(nil)

return M
