{-# LANGUAGE TemplateHaskell #-}

module Unison.MCP.StaticResources
  ( staticResources,
    unisonGuideText,
  )
where

import Data.Map (Map)
import Data.Map qualified as Map
import Data.Text (Text)
import Network.MCP.Types
import Unison.Util.FileEmbed (embedProjectStringFile)

staticResources :: Map Text (Resource, ResourceContent)
staticResources :: Map Text (Resource, ResourceContent)
staticResources =
  [(Text, (Resource, ResourceContent))]
-> Map Text (Resource, ResourceContent)
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
    [ (Resource -> Text
resourceUri (Resource -> Text)
-> ((Resource, ResourceContent) -> Resource)
-> (Resource, ResourceContent)
-> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Resource, ResourceContent) -> Resource
forall a b. (a, b) -> a
fst ((Resource, ResourceContent) -> Text)
-> (Resource, ResourceContent) -> Text
forall a b. (a -> b) -> a -> b
$ (Resource, ResourceContent)
unisonGuideResource, (Resource, ResourceContent)
unisonGuideResource)
    ]

unisonGuideText :: Text
unisonGuideText :: Text
unisonGuideText = $(embedProjectStringFile "src/Unison/MCP/StaticResources/unison-guide.md")

unisonGuideResource :: (Resource, ResourceContent)
unisonGuideResource :: (Resource, ResourceContent)
unisonGuideResource =
  ( Resource
      { $sel:resourceUri:Resource :: Text
resourceUri = Text
"file://unison-guide",
        $sel:resourceName:Resource :: Text
resourceName = Text
"Unison Programming Guide",
        $sel:resourceDescription:Resource :: Maybe Text
resourceDescription = Text -> Maybe Text
forall a. a -> Maybe a
Just Text
"A complete guide on how to program in Unison in Markdown format",
        $sel:resourceMimeType:Resource :: Maybe Text
resourceMimeType = Text -> Maybe Text
forall a. a -> Maybe a
Just Text
"text/markdown",
        $sel:resourceTemplate:Resource :: Maybe Text
resourceTemplate = Maybe Text
forall a. Maybe a
Nothing
      },
    ResourceContent
      { $sel:resourceContentUri:ResourceContent :: Text
resourceContentUri = Text
"file://unison-guide",
        $sel:resourceContentMimeType:ResourceContent :: Maybe Text
resourceContentMimeType = Text -> Maybe Text
forall a. a -> Maybe a
Just Text
"text/markdown",
        $sel:resourceContentText:ResourceContent :: Maybe Text
resourceContentText = Text -> Maybe Text
forall a. a -> Maybe a
Just Text
unisonGuideText,
        $sel:resourceContentBlob:ResourceContent :: Maybe Text
resourceContentBlob = Maybe Text
forall a. Maybe a
Nothing
      }
  )