local lspconfig_status_ok, lspconfig = pcall(require, "lspconfig")
if not lspconfig_status_ok then
	return
end

local function idxOf(array, value)
	for i, v in ipairs(array) do
		if v == value then
			return i
		end
	end
	return nil
end

local unregis_lsp = {}
local data_ok, unregis = pcall(require, "core.config")
if data_ok then
	if unregis.unregister_lsp ~= nil then
		unregis_lsp = unregis.unregister_lsp
	end
end

local idxts = idxOf(unregis_lsp, "tsserver")
if idxts ~= nil then
	lspconfig.tsserver.setup({
		on_attach = require("user.lsp.handlers").on_attach,
		capabilities = require("user.lsp.handlers").capabilities,
		-- add cmd
		cmd = { "typescript-language-server", "--stdio" },
		-- add file type support
		filetypes = {
			"javascript",
			"javascriptreact",
			"javascript.jsx",
			"typescript",
			"typescriptreact",
			"typescript.tsx",
		},
		-- add dynamic root dir support
		root_dir = require("lspconfig.util").root_pattern("package.json", "tsconfig.json", "jsconfig.json", ".git"),
		init_options = {
			hostInfo = "neovim",
		},
	})
end

local idxemmet = idxOf(unregis_lsp, "emmet_ls")
if idxemmet ~= nil then
	lspconfig.emmet_ls.setup({
		on_attach = require("user.lsp.handlers").on_attach,
		capabilities = require("user.lsp.handlers").capabilities,
		-- add cmd
		cmd = { "emmet-ls", "-c", "--stdio" },
		-- add file type support
		filetypes = {
			"javascript",
			"javascriptreact",
			"javascript.jsx",
			"typescript",
			"typescriptreact",
			"typescript.tsx",
		},
		-- add dynamic root dir support
		root_dir = require("lspconfig.util").root_pattern("package.json", "tsconfig.json", "jsconfig.json", ".git"),
	})
end

local idxeslint = idxOf(unregis_lsp, "eslint")
if idxeslint ~= nil then
	lspconfig.eslint.setup({
		on_attach = require("user.lsp.handlers").on_attach,
		capabilities = require("user.lsp.handlers").capabilities,
		-- add cmd
		cmd = { "vscode-eslint-language-server", "--stdio" }, -- add file type support
		filetypes = {
			"javascript",
			"javascriptreact",
			"javascript.jsx",
			"typescript",
			"typescriptreact",
			"typescript.tsx",
		},
		-- add dynamic root dir support
		root_dir = require("lspconfig.util").root_pattern("package.json", "tsconfig.json", "jsconfig.json", ".git"),
	})
end

local status_ok, configs = pcall(require, "nvim-treesitter.configs")
if not status_ok then
	return
end

configs.setup({
	ensure_installed = { "typescript", "tsx" }, -- pastikan parser TypeScript terinstal
	highlight = {
		enable = true, -- aktifkan highlight berbasis treesitter
		additional_vim_regex_highlighting = false,
	},
	rainbow = {
		enable = false,
	},
	incremental_selection = { enable = true },
	indent = { enable = true, disable = { "python", "css" } },
	autopairs = {
		enable = true,
	},
})

require("nvim-ts-autotag").setup()