" Always show a statusline
set laststatus=2

" Get current filetype
function! CheckFT(filetype)
	if a:filetype == ''
		return '-'
	else
		return tolower(a:filetype)
	endif
endfunction

" set colors for statusline based on mode
function! DetectMode(mode)
	if empty($DISPLAY)
		let left=""
		let right=""
	else
		let left=""
		let right=""
	end

	let statusline=""
	" Mode
	if a:mode == 'n'
		let statusline .= "%#GruvboxBg4#\ " . left
		let statusline .= "%#PmenuThumb#NORMAL"
		let statusline .= "%#GruvboxBg4#" . right . "\ "
	elseif a:mode == 'i'
		let statusline .= "%#GruvboxBlue#\ " . left
		let statusline .= "%#PmenuSel#INSERT"
		let statusline .= "%#GruvboxBlue#" . right . "\ "
	elseif a:mode == 'R'
		let statusline .= "%#GruvboxRed#\ " . left
		let statusline .= "%#DiffDelete#REPLACE"
		let statusline .= "%#GruvboxRed#" . right . "\ "
	elseif a:mode ==# 'v'
		let statusline .= "%#GruvboxAqua#\ " . left
		let statusline .= "%#DiffChange#VISUAL"
		let statusline .= "%#GruvboxAqua#" . right . "\ "
	elseif a:mode ==# 'V'
		let statusline .= "%#GruvboxAqua#\ " . left
		let statusline .= "%#DiffChange#VISUAL"
		let statusline .= "%#GruvboxAqua#" . right . "\ "
	elseif a:mode ==# ''
		let statusline .= "%#GruvboxAqua#\ " . left
		let statusline .= "%#DiffChange#VISUAL"
		let statusline .= "%#GruvboxAqua#" . right . "\ "
	elseif a:mode ==# 'c'
		let statusline .= "%#GruvboxBg2#\ " . left
		let statusline .= "%#Pmenu#COMMAND"
		let statusline .= "%#GruvboxBg2#" . right . "\ "
	elseif a:mode ==# 't'
		let statusline .= "%#ModeTFGCS#\ " . left
		let statusline .= "%#ModeTFGC#\ TERMINAL\ "
		let statusline .= "%#ModeTFGCS#" . right . "\ " . left
		let statusline .= "%#ModeTFGC#%[%n\ ̷%{bufnr('$')}\ "
	elseif a:mode == 's' || a:mode == 'S' || a:mode == '^S'
		let statusline .= "%#GruvboxAqua#\ " . left
		let statusline .= "%#DiffChange#VISUAL"
		let statusline .= "%#GruvboxAqua#" . right . "\ "
	endif
	" Filename
	" grey = normal
	" aqua = modified
	" red = read only and not modified
	if &mod == 1
		let statusline .= "%#GruvboxAqua#\ " . left
		let statusline .= "%#DiffChange#%.30f"
		let statusline .= "%#GruvboxAqua#" . right . "\ "
	else
		if &readonly == 1
			let statusline .= "%#GruvboxRed#\ " . left
			let statusline .= "%#DiffDelete#%.30f"
			let statusline .= "%#GruvboxRed#" . right . "\ "
		else
			let statusline .= "%#GruvboxBg4#\ " . left
			let statusline .= "%#PmenuThumb#%.30f"
			let statusline .= "%#GruvboxBg4#" . right . "\ "
		endif
	endif

	" Seperator
	let statusline .= "%="

	" git branch
	if exists("*FugitiveHead")
		let head = FugitiveHead()
		if head != ''
			let statusline .= "%#GruvboxBg4#\ " . left
			let statusline .= "%#PmenuThumb#" . head
			let statusline .= "%#GruvboxBg4#" . right . "\ "
		endif
	endif

	" Filetype
	let statusline .= "%#GruvboxBlue#\ " . left
	let statusline .= "%#PmenuSel#%{CheckFT(&filetype)}"
	let statusline .= "%#GruvboxBlue#" . right . "\ "

	" Cursor location and file length
	let statusline .= "%#GruvboxYellow#\ " . left
	let statusline .= "%#Search#%c:%l\ %#IncSearch#\ %L"
	let statusline .= "%#GruvboxOrange#" . right . "\ "


	return statusline
endfunction

set statusline=%!DetectMode(mode())
