;; Various functions, written for my own amusement.

(require 'url)

(defun whiskybase-open-url ()
  "Open a Whiskybase URL from a number under the cursor."
  (interactive)
  (let ((has-whiskybase-item nil))
    (if (numberp (number-at-point))
        ;; We'll need to browse to the Whiskybase number, as a string.
        (progn ()
               (browse-url (concat "https://www.whiskybase.com/whiskies/whisky/" (number-to-string (number-at-point))))
               (setq has-whiskybase-item t))

      ;; No such number.
      ;; Do we have a selection? If so, use it as a Whiskybase query.
      (if mark-active
          (let ((selection (buffer-substring-no-properties (region-beginning) (region-end))))
            (if (> (length selection) 0)
                (progn ()
                       (browse-url (concat "https://www.whiskybase.com/search?q=" (url-hexify-string selection)))
                       (setq has-whiskybase-item t))))))


    (when (not has-whiskybase-item)
      ;; We haven't found a valid Whiskybase term. Ask for an ID:
      (let ((wb-number (read-number "Enter the WhiskyBase ID: ")))
        (if (numberp wb-number)
            (browse-url (concat "https://www.whiskybase.com/whiskies/whisky/" (number-to-string wb-number)))
          (message (concat "Invalid number: " wb-number ". Aborting.")))))))
