module Proteome.BufEnter(
  bufEnter,
) where

import Data.List (intercalate)
import Data.Maybe (maybeToList)
import System.FilePath ((</>))
import Neovim (buffer_set_option', Neovim, vim_get_current_buffer', toObject)
import Ribosome.Config.Setting (setting)
import Proteome.Data.Proteome (Proteome)
import Proteome.Data.Project (Project(Project), ProjectMetadata(DirProject), ProjectRoot(ProjectRoot))
import Proteome.Project (allProjects)
import Proteome.Settings (tagsFileName)

setBufferTags :: [String] -> Neovim e ()
setBufferTags tags = do
  buf <- vim_get_current_buffer'
  buffer_set_option' buf "tags" (toObject $ intercalate "," tags)

projectRoot :: Project -> Maybe FilePath
projectRoot (Project (DirProject _ (ProjectRoot root) _) _ _ _) = Just root
projectRoot _ = Nothing

bufEnter :: Proteome ()
bufEnter = do
  pros <- allProjects
  name <- setting tagsFileName
  let roots = pros >>= maybeToList . projectRoot
  let tags = fmap (</> name) roots
  setBufferTags tags