// import './login.css';
import { Backdrop, Box, Button, CircularProgress, TextField, List, ListItem, ListItemButton, ListItemText, ListItemIcon, Select, MenuItem } from '@mui/material';
import React, { useState, useEffect } from 'react'
import { dbGetCollection, dbGetItems, dbUpdateCollectionGlob, dbUpdateCollectionSummary, dbUpdateCollectionSummaryNLTK, dbUpdateCollectionSummaryBERT } from './database_util';

import AddIcon from '@mui/icons-material/Add';

const CollectionEditor = (props) => {
    const [open, setOpen] = useState(false);
    const [summarizer, setSummarizer] = useState('');

    const updateGlob = (event) => {
        // console.log();

        let copy =  JSON.parse(JSON.stringify(props.collection))

        copy["collection_data"]["glob"] = event.target.value

        props.onCollectionUpdate(copy)

        // console.log(copy);

    }

    const [summaries, setSummaries] = useState([]);
 
    const generateSummary = async () => {
        if (summarizer === '') {
            return;
        }
        setOpen(true);
        let id = props.collection["collection_id"]
        let newSummary = "";
        const existingIndex = summaries.findIndex(summary => {
            if (summary && summary.key.startsWith(summarizer.replace(" ", ""))) {
                return true;
            }
            return false;
        });

        let newTextField;

        if (existingIndex !== -1) {
            // Update the existing summary
            const existingSummary = summaries[existingIndex];
            await updateCollectionSummary(id);
            props.onCollectionUpdate(await dbGetCollection(id));
            setOpen(false);
            newTextField = <TextField disabled multiline maxRows={20} fullWidth label="Summary:" value={props.collection[`${summarizer}_summary`]} />;
            newSummary = React.cloneElement(existingSummary, {}, [<h3>{summarizer.toUpperCase()} Summary:</h3>, newTextField]);
            const updatedSummaries = [...summaries];
            updatedSummaries[existingIndex] = newSummary;
            setSummaries(updatedSummaries);
        } else {
            // Create a new summary
            await updateCollectionSummary(id);
            props.onCollectionUpdate(await dbGetCollection(id));
            setOpen(false);
            newTextField = <TextField disabled multiline maxRows={20} fullWidth label="Summary:" value={props.collection[`${summarizer}_summary`]} />;
            newSummary = <div key={`${summarizer.replace(" ", "")}Summary`}><h3>{summarizer.toUpperCase()} Summary:</h3>{newTextField}</div>;
            setSummaries([...summaries, newSummary]);
        }
    }

    const updateCollectionSummary = async (id) => {
        switch (summarizer) {
            case "t5":
                await dbUpdateCollectionSummary(id);
                break;
            case "bert":
                await dbUpdateCollectionSummaryBERT(id);
                break;
            case "nltk":
                await dbUpdateCollectionSummaryNLTK(id);
                break;
            default:
                break;
        }
    }


    // console.log("loadedRawFiles", props.loadedRawFiles)

    return (
        <Box>
            <h1>{props.collection["collection_name"]}</h1>

            <h3>Loaded Files</h3>
            
            <List sx={{boxShadow:1}}>
            {
                props.loadedRawFiles.map((f) => {
                    return (
                        <ListItem>
                            <ListItemButton>
                                <ListItemText>
                                    {f}
                                </ListItemText>
                            </ListItemButton>
                        </ListItem>
                    );
                })
            }
            </List>
            <List sx={{boxShadow:1}}>
                <ListItem>
                    <ListItemText>
                        Please select which summarizer you would like to use to generate the summary
                    </ListItemText>
                    <Select 
                        value={summarizer} 
                        onChange={(e) => setSummarizer(e.target.value)} 
                        sx={{ width: "300px" }}
                    >
                        <MenuItem value="t5">T5 Summarizer</MenuItem>
                        <MenuItem value="nltk">NLTK Summarizer</MenuItem>
                        <MenuItem value="bert">BERT Summarizer</MenuItem>
                    </Select>
                </ListItem>
            </List>
            {/* <h3>Generated Summary:</h3>
            <TextField disabled multiline maxRows={20} fullWidth label="Summary:" value={props.collection["collection_summary"]}/> */}
            <Button onClick={generateSummary}>Generate Summary</Button>
            {summaries.map((summary) => summary)}

            <Backdrop
                open={open}
            >
                <CircularProgress/>
            </Backdrop>
        </Box>
    );
}

export default CollectionEditor;