{-# 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
      { resourceUri :: Text
resourceUri = Text
"file://unison-guide",
        resourceName :: Text
resourceName = Text
"Unison Programming Guide",
        resourceDescription :: 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",
        resourceMimeType :: Maybe Text
resourceMimeType = Text -> Maybe Text
forall a. a -> Maybe a
Just Text
"text/markdown",
        resourceTemplate :: Maybe Text
resourceTemplate = Maybe Text
forall a. Maybe a
Nothing
      },
    ResourceContent
      { resourceContentUri :: Text
resourceContentUri = Text
"file://unison-guide",
        resourceContentMimeType :: Maybe Text
resourceContentMimeType = Text -> Maybe Text
forall a. a -> Maybe a
Just Text
"text/markdown",
        resourceContentText :: Maybe Text
resourceContentText = Text -> Maybe Text
forall a. a -> Maybe a
Just Text
unisonGuideText,
        resourceContentBlob :: Maybe Text
resourceContentBlob = Maybe Text
forall a. Maybe a
Nothing
      }
  )