{- This file is part of Vervis.
 -
 - Written in 2016 by fr33domlover <fr33domlover@riseup.net>.
 -
 - ♡ Copying is an act of love. Please copy, reuse and share.
 -
 - The author(s) have dedicated all copyright and related and neighboring
 - rights to this software to the public domain worldwide. This software is
 - distributed without any warranty.
 -
 - You should have received a copy of the CC0 Public Domain Dedication along
 - with this software. If not, see
 - <http://creativecommons.org/publicdomain/zero/1.0/>.
 -}

module Vervis.Handler.Home
    ( getHomeR
    )
where

import Vervis.Import

import Database.Esqueleto hiding ((==.))
import Vervis.Git

import qualified Database.Esqueleto as E ((==.))

intro :: Handler Html
intro = do
    rows <- do
        repos <- runDB $ select $ from $ \ (sharer, project, repo) -> do
            where_ $
                project ^. ProjectSharer E.==. sharer ^. SharerId &&.
                repo ^. RepoProject E.==. project ^. ProjectId
            orderBy
                [ asc $ sharer ^. SharerIdent
                , asc $ project ^. ProjectIdent
                , asc $ repo ^. RepoIdent
                ]
            return
                ( sharer ^. SharerIdent
                , project ^. ProjectIdent
                , repo ^. RepoIdent
                )
        root <- appRepoDir . appSettings <$> getYesod
        liftIO $ forM repos $ \ (Value sharer, Value project, Value repo) -> do
            let path =
                    root </> unpack sharer </> unpack project </> unpack repo
            mdt <- lastChange path
            ago <- case mdt of
                Nothing -> return "never"
                Just dt -> timeAgo dt
            return (sharer, project, repo, ago)
    defaultLayout $ do
        setTitle "Welcome to Vervis!"
        $(widgetFile "homepage")

personalOverview :: Entity Person -> Handler Html
personalOverview (Entity _pid person) = do
    (ident, projects) <- runDB $ do
        let sid = personIdent person
        sharer <- get404 sid
        projs <- selectList [ProjectSharer ==. sid] [Asc ProjectIdent]
        let pi (Entity _ proj) = projectIdent proj
        return (sharerIdent sharer, map pi projs)
    defaultLayout $ do
        setTitle "Vervis > Overview"
        $(widgetFile "personal-overview")

getHomeR :: Handler Html
getHomeR = do
    mp <- maybeAuth
    case mp of
        Just p  -> personalOverview p
        Nothing -> intro