{-# LANGUAGE TemplateHaskell #-}
module Language.Elm.CoreSources where

import Data.FileEmbed
import Data.ByteString.Char8 (unpack)

{-|
JavaScript Header to append at the beginning of a complete, linked Elm program.
-}
header :: String
header = "var Elm = Elm || { Native: {} };\n"
  
{-|
Source for the Elm Runtime library
-}
runtime :: String
runtime =  unpack $(embedFile  "src/Native/Runtime.js")

{-|
Dictionary mapping strings of the form "Native.ModuleName" to the JS source code
for that stdlib native module.
-}
nativeSources ::  [(String, String)]
nativeSources = map (\(x,y) -> (x, unpack y)) $ [
        ("Native.Array", $(embedFile  "src/Native/Array.js"))
        , ("Native.Basics", $(embedFile  "src/Native/Basics.js"))
        , ("Native.Bitwise", $(embedFile  "src/Native/Bitwise.js"))
        , ("Native.Char", $(embedFile  "src/Native/Char.js"))
        , ("Native.Color", $(embedFile  "src/Native/Color.js"))
        , ("Native.Date", $(embedFile  "src/Native/Date.js"))
        , ("Native.Debug", $(embedFile  "src/Native/Debug.js"))
        , ("Native.Http", $(embedFile  "src/Native/Http.js"))
        , ("Native.Json", $(embedFile  "src/Native/Json.js"))
        , ("Native.Keyboard", $(embedFile  "src/Native/Keyboard.js"))
        , ("Native.List", $(embedFile  "src/Native/List.js"))
        , ("Native.Mouse", $(embedFile  "src/Native/Mouse.js"))
        , ("Native.Ports", $(embedFile  "src/Native/Ports.js"))
        , ("Native.Regex", $(embedFile  "src/Native/Regex.js"))
        , ("Native.Show", $(embedFile  "src/Native/Show.js"))
        , ("Native.Signal", $(embedFile  "src/Native/Signal.js"))
        , ("Native.String", $(embedFile  "src/Native/String.js"))
        , ("Native.Text", $(embedFile  "src/Native/Text.js"))
        , ("Native.Time", $(embedFile  "src/Native/Time.js"))
        , ("Native.Touch", $(embedFile  "src/Native/Touch.js"))
        , ("Native.Trampoline", $(embedFile  "src/Native/Trampoline.js"))
        , ("Native.Transform2D", $(embedFile  "src/Native/Transform2D.js"))
        , ("Native.Utils", $(embedFile  "src/Native/Utils.js"))
        , ("Native.WebSocket", $(embedFile  "src/Native/WebSocket.js"))
        , ("Native.Window", $(embedFile  "src/Native/Window.js"))
        
        , ("Native.Graphics.Collage", $(embedFile  "src/Native/Graphics/Collage.js"))
        , ("Native.Graphics.Element", $(embedFile  "src/Native/Graphics/Element.js"))
        , ("Native.Graphics.Input", $(embedFile  "src/Native/Graphics/Input.js"))


        ]

{-|
List of .elm sources for the Elm Standard Library
-}        
stdlibSources :: [String]
stdlibSources = map unpack [$(embedFile  "src/Array.elm")
   ,$(embedFile  "src/Array.elm")
   ,$(embedFile  "src/Basics.elm")
   ,$(embedFile  "src/Bitwise.elm")
   ,$(embedFile  "src/Char.elm")
   ,$(embedFile  "src/Color.elm")
   ,$(embedFile  "src/Date.elm")
   ,$(embedFile  "src/Debug.elm")
   ,$(embedFile  "src/Dict.elm")
   ,$(embedFile  "src/Http.elm")
   ,$(embedFile  "src/Keyboard.elm")
   ,$(embedFile  "src/List.elm")
   ,$(embedFile  "src/Maybe.elm")
   ,$(embedFile  "src/Mouse.elm")
   ,$(embedFile  "src/Random.elm")
   ,$(embedFile  "src/Regex.elm")
   ,$(embedFile  "src/Result.elm")
   ,$(embedFile  "src/Set.elm")
   ,$(embedFile  "src/Signal.elm")
   ,$(embedFile  "src/String.elm")
   ,$(embedFile  "src/Text.elm")
   ,$(embedFile  "src/Time.elm")
   ,$(embedFile  "src/Touch.elm")
   ,$(embedFile  "src/Trampoline.elm")
   ,$(embedFile  "src/Transform2D.elm")
   ,$(embedFile  "src/WebSocket.elm")
   ,$(embedFile  "src/Window.elm")
   
   ,$(embedFile  "src/Json/Encode.elm")
   ,$(embedFile  "src/Json/Decode.elm")
   
   ,$(embedFile  "src/Graphics/Collage.elm")
   ,$(embedFile  "src/Graphics/Element.elm")
   ,$(embedFile  "src/Graphics/Input.elm")
   
   ,$(embedFile  "src/Graphics/Input/Field.elm")
   ]