import React, { useState, useEffect } from "react";
import Layout from "../Layout";
import Topbar from "../components/Topbar";
import { useParams, useNavigate } from "react-router-dom";
import MonacoEditor from 'react-monaco-editor';
import fetchEditorThemes from '../EditorThemes';

export default function PastePage() {
    let themeList = fetchEditorThemes();
    
    let { pasteId } = useParams();

    let [ paste, setPaste ] = useState({});
    let [ editorLanguage, setEditorLanguage ] = useState("rust");
    let [ editorTheme, setEditorTheme ] = useState("vs-dark");

    useEffect(() => {
        fetch(`${process.env.REACT_APP_PASTE_API_LOCATION}/paste/${pasteId}`)
            .then(response => {
                if (response.ok) {
                    return response.json()
                }

                throw response;
            })
            .then(response => {
                if (response.error) {
                    throw response;
                }

                setPaste(response.paste);

                console.log(response);
            })
            .catch(error => {
                console.log(error);

                setPaste({ data: "Failed to retrieve paste, or paste does not exist." })
            });
    }, [])

    function beforeEditorMount(editor, monaco) {
        themeList.forEach(value => {
            monaco.editor.defineTheme(value.id, value.theme);
        })
    }

    return (
        <Layout>
            <Topbar 
                paste={paste}
                onThemeChange={(value) => setEditorTheme(value)}
                onLanguageChange={(value) => setEditorLanguage(value)}
                defaultThemeValue="vs-dark"
            />
            <MonacoEditor
                language={editorLanguage}
                theme={editorTheme}
                value={paste.data}
                height="95vh"
                options={{
                    selectOnLineNumbers: true,
                    readOnly: true
                }}
                editorDidMount={beforeEditorMount}
                disabled
            />
        </Layout>
    );
}