{-# LANGUAGE OverloadedStrings #-}

module Language.ATS.Package.Upgrade ( upgradeAtsPkg
                                    ) where

import qualified Data.ByteString.Lazy.Char8 as BSL
import           Data.Char                  (isDigit)
import           Data.List                  (intersperse)
import           Data.Semigroup
import           Network.HTTP.Client
import           Network.HTTP.Client.TLS    (tlsManagerSettings)
import           System.Info

manufacturer :: String
manufacturer = case os of
    "darwin" -> "apple"
    _        -> "unknown"

targetArch :: String
targetArch = mconcat . intersperse "-" $ [arch, manufacturer, os]

upgradeAtsPkg :: IO ()
upgradeAtsPkg = do
    manager <- newManager tlsManagerSettings
    initialRequest <- parseRequest "https://github.com/vmchale/atspkg/releases/latest"
    response <- responseBody <$> httpLbs (initialRequest { method = "GET", redirectCount = 0 }) manager
    let strVersion = BSL.takeWhile (/='"') . BSL.dropWhile (not . isDigit) . BSL.dropWhile (/='"') $ response
        binRequest = "https://github.com/vmchale/atspkg/releases/download/" <> BSL.unpack strVersion <> "/atspkg-" <> targetArch
    putStrLn binRequest
    followupRequest <- parseRequest binRequest
    binBytes <- responseBody <$> httpLbs (followupRequest { method = "GET" }) manager
    BSL.writeFile "atspkg" binBytes