(defpackage :com.tee-it-up-golf.config
  (:use :common-lisp :ucw-core :ucw-standard)
  (:nicknames :golf-config)
  (:export
   :*golf-dev-mode*
   :*golf-data-root*
   :*golf-server-port*
   :*golf-server-host*
   :*golf-db-spec*
   :*golf-request-length-limit*
   :*golf-file-upload-root*
   :update-database-pathnames
   :make-golf-application))

(defpackage :com.tee-it-up-golf.util
  (:use :common-lisp)
  (:import-from :arnesi :with-unique-names)
  (:nicknames :golf-util)
  (:export
   :brief-date
   :stream->bytes
   :strip-time
   :with-assoc))

(defpackage :com.tee-it-up-golf.db
  (:use :common-lisp :elephant :org.unknownlamer.golgonooza.elephant
	:golf-util :golf-config)
  (:import-from :flexi-streams :make-in-memory-input-stream)
  (:import-from :cl-fad :file-exists-p)
  (:import-from :arnesi :it :when-bind :if-bind)
  (:nicknames :golf-db)
  (:export
   ;; Database Functions
   :delete-database-object
   :delete-database-objects
   :get-instances-limit
   ;; Types
   :audio-file
   :radio-show
   ;; Methods
   :audio-file-length
   :audio-file-type
   :audio-stream
   :audio-data
   :write-audio-file
   ;; Accessors
   :show-date
   :show-title
   :audio-data
   :transcript
   ;; Query Methods
   :get-shows-by
   :count-shows-by))

(defpackage :com.tee-it-up-golf.auth
  (:use :common-lisp :elephant :com.tee-it-up-golf.db)
  (:nicknames :golf-auth)
  (:export :user :create-user :find-user :check-password :username :password))

(defpackage :com.tee-it-up-golf.web
  (:use :common-lisp :ucw-core :ucw-standard :ucw-forms
	:golgonooza :golgonooza-db :golgonooza-forms
	:golf-db :golf-util :golf-config)
  (:import-from :arnesi
		:it :awhen :when-bind :if-bind
		:defgeneric/cc :defmethod/cc
		:compose)
  (:import-from :metabang.utilities
		:date-string :date-string-brief :symbol->string)
  (:nicknames :golf-web)
  (:export
   ;; Applications
   :golf-admin-application
   :golf-frontend-application
   ;; Windows
   :golf-window
   :golf-admin-window
   :golf-frontend-window
   :audio-file-window
   :play-file
   ;; Viewer
   :show-viewer
   :standard-show-viewer
   :full-show-viewer
   :frontend-show-viewer
   :admin-show-viewer
   :show-previewer
   :show-selector
   :compact-show-selector
   :viewer-show
   :render-show
   :render-controls
   ;; Lister/Chooser
   :show-list
   :show-chooser
   :ranged-show-list
   :ranged-show-chooser
   :standard-ranged-show-chooser
   :sidebar-show-chooser
   :admin-show-chooser
   :ranged-admin-show-chooser
   :shows
   ;; database-range-view
   :database-range-view
   :cached-database-range-view
   :range-view-get-instances
   :range-view-count-instances
   :scroll-start
   :scroll-end
   :scroll-forward
   :scroll-backward
   :scroll-to-page
   ;; Misc
   :composite-component
   :golf-widget-component
   ;; Utilties
   :component-controls
   :defcontainer
   :create-entry-points))


(defpackage :com.tee-it-up-golf.user
  (:use :common-lisp :golf-config :golf-web :golf-db :golf-util
	:ucw-core :ucw-standard :ucw-site-control)
  (:nicknames :golf-user)
  (:export
   :start-golf-site
   :stop-golf-site
   :restart-golf-site))

(defpackage :com.tee-it-up-golf.tests
  (:use :common-lisp)
  (:nicknames :golf-tests))