;; ----- Org ------
(defun my/gtd-agenda (view-name)
  "Create an agenda view for GTD  in different context based on tags.
With this approach, we cannot have an \"shared\" inbox as tag filtering
is applied to the whole view *before* this function."
  (let ((agenda-header view-name))
    `((agenda "" ((org-agenda-span 'day)
                  (org-agenda-overriding-header ,agenda-header)
                  (org-agenda-skip-function
                   '(org-agenda-skip-entry-if 'todo 'done))
		  ))
      (todo "NEXT"
	    ((org-agenda-skip-function
              '(org-agenda-skip-entry-if 'scheduled 'deadline))
	     (org-agenda-overriding-header "Next")
	     ))
      (tags-todo "CATEGORY=\"inbox\""
		 ((org-agenda-prefix-format "  %?-12t% s")
		  (org-agenda-overriding-header "Inbox"))))))

(use-package org
  :ensure t
  :defer t
  :commands (org-mode org-version)
  :hook (org-mode . visual-line-mode)
  :mode
  ("\\.org\\'" . org-mode)
  :bind (("C-c a" . org-agenda)
         ("C-c c" . org-capture)
         ("C-c ," . nil) ; For homw
         :map org-mode-map
         ("C-'" . nil)) ; For avy-goto-char2 (org-cycle-agenda-files)
  :custom
  (org-directory (expand-file-name "~/org/"))
  (org-cycle-hide-drawers 'all) ; Cleaner view
  (org-startup-folded 'fold) ; Cleaner view
  (org-hide-block-startup t)
  (org-todo-keywords '((sequence "TODO(t)" "WAIT(w)" "NEXT(n)" "STARTED(s)" "|" "CANCEL(c)" "DONE(d)")))
  ;; Agenda
  (org-agenda-files '("inbox.org" "todo.org"))
  (org-capture-templates
   '(("t" "Todo" entry (file "inbox.org")
      "* TODO %?\n  /Entered on/  %U")
     ("s" "Sport")
     ("sc" "Course" entry (file "sport.org")
      "* %t  :course:
%^{durée}p
%^{intensité}p")
     ("st" "Étirement" entry (file "sport.org")
      "* %t  :étirement:
%^{hamstring}p
%^{butterfly}p
%^{pancake}p
%^{pigeon}p
%^{middle_split}p
%^{fenêtre}p")
     ("ss" "Escalade" entry (file "sport.org")
      "* %t :escalade: \n %^{durée}p")
     ("sm" "Muscu" entry (file "sport.org")
      "* %t :muscu:
%^{muscle_up_bar}p
%^{compression}p
%^{extension}p
%^{push_up_tucked}p
%^{planche_tucked}p
")
     ("sk" "Parkour" entry (file "sport.org")
      "* %t :parkour: \n %^{durée}p")
     ("sp" "Patinage" entry (file "sport.org")
      "* %t :patinage: \n %^{durée}p")
     ("sr" "Roller" entry (file "sport.org")
      "* %t :roller: \n %^{durée}p")))
  
  (org-return-follows-link t) ; RET
  (org-mouse-1-follows-link t)
  (org-log-done 'time) ; Store date when CLOSED
  (org-link-descriptive t) ; Display links as the description provided
  (org-hide-leading-stars t) ; Better display
  (org-hide-emphasis-marker t) ; Better display
  (org-refile-targets ; Refile in subprojets
   '((org-agenda-files . (:maxlevel . 4))
     (nil . (:maxlevel . 2))))
  (org-agenda-custom-commands
   `(
     ("h" "Home" ,(my/gtd-agenda "Home") ((org-agenda-tag-filter-preset '("-work"))))
     ("w" "Work" ,(my/gtd-agenda "Work") ((org-agenda-tag-filter-preset '("+work"))))
     ("r" "Rewiew" 
      ((todo "TODO"))
      ((org-agenda-skip-scheduled-if-deadline-is-shown t)))
     ("w" "Waiting tasks" ((todo "WAIT")))))

  :config
  ;; gunlpot support
  (org-babel-do-load-languages
   'org-babel-load-languages
   '((gnuplot . t))))

;; Quick and dirty plotting
(use-package gnuplot)
;;(use-package gnuplot-mode)

(provide 'init-org)