import { useUser,withPageAuthRequired } from "@auth0/nextjs-auth0/client";
import { CircularProgress, Grid, IconButton, Tooltip, Typography } from "@mui/material";
import Card from "@mui/material/Card";
import CardContent from "@mui/material/CardContent";
import EditableArtistPortfolio from "../../../components/dashboard/artist/editablePortfolio";
import { useEffect, useState } from "react";
import TextField from '@mui/material/TextField';
import Button from '@mui/material/Button';
import Switch from '@mui/material/Switch';
import Divider from '@mui/material/Divider';
import ArtistRequest from "../../../components/dashboard/admin/artistRequest";
import Box from '@mui/material/Box';
import { Save } from "@mui/icons-material";

const ArtistSettings = () => {
  const {user, isLoading} = useUser();
  const [loading, setLoading] = useState(true);

  const [name, setName] = useState("");
    const [description, setDescription] = useState("");
    const [social1, setSocial1] = useState("");
    const [social2, setSocial2] = useState("");
    const [social3, setSocial3] = useState("");
    const [social4, setSocial4] = useState("");
    const [guidelines, setGuidelines] = useState("");
    const [saved, setSaved] = useState(false);

  const [profileData, setArtistData] = useState(null);

  const handleDisplayNameChange = (event) => {
    setName(event.target.value);
  }
const handleBiographyChange = (event) => {
    setDescription(event.target.value);
}
const handleSocial1Change = (event) => {
    setSocial1(event.target.value);
}
const handleSocial2Change = (event) => {
    setSocial2(event.target.value);
}
const handleSocial3Change = (event) => {
    setSocial3(event.target.value);
}
const handleSocial4Change = (event) => {
    setSocial4(event.target.value);
}
const handleGuidelinesChange = (event) => {
    setGuidelines(event.target.value);
}

const saveChanges = async () => {
    var userResponse = await fetch('/api/artist/profile',{
        method: 'PUT',
        body: JSON.stringify({name: name, description: description, socialMeidaLink1: social1, socialMeidaLink2: social2, socialMeidaLink3: social3, socialMeidaLink4: social4, requestGuidelines: guidelines})
    });
    var user = await userResponse.json();
    setSaved(true)
}

  const getData = async () => {
    const profileResponse = await fetch('/api/artist/profile');
    const sellerProfile = await profileResponse.json();
    setDescription(sellerProfile["description"]);
    setName(sellerProfile["name"]);
    setSocial1(sellerProfile["socialMeidaLink1"]);
    setSocial2(sellerProfile["socialMeidaLink2"]);
    setSocial3(sellerProfile["socialMeidaLink3"]);
    setSocial4(sellerProfile["socialMeidaLink4"]);
    setGuidelines(sellerProfile["requestGuidelines"]);
    setArtistData(sellerProfile);
    setLoading(false);
  }

  useEffect(() => {
      getData()
  }, []);
  return (
    <>
    {(loading) ? (
        <Box sx={{textAlign:"center", paddingTop:"20%"}}>
            <CircularProgress  />
        </Box>
    ):
    (

    <Grid container spacing={2}>
    <Grid item xs={12} md={6}>
        <Card>
            <CardContent>
                <Grid container spacing={2}>
                    <Grid item xs={12} md={8}>
                        <Typography variant="h5" gutterBottom>General Settings</Typography>
                    </Grid>
                    <Grid item xs={12} md={4} sx={{textAlign:"right"}} >
                        <Tooltip arrow title="Save Changes">
                            <IconButton onClick={saveChanges} color="success"><Save /></IconButton>
                        </Tooltip>
                    </Grid>
                    <Grid item xs={12} md={12} >
                        <Grid container spacing={4} sx={{paddingTop:"2%"}}>
                            <Grid item xs={12} md={12} sx={{paddingTop:"2%"}}>
                                <TextField id="outlined-basic" label="Shop Name" value={name} onChange={handleDisplayNameChange} size="small" variant="outlined" fullWidth />
                            </Grid>
                            <Grid item xs={12} md={12} sx={{paddingTop:"2%"}}>
                                <TextField id="outlined-basic" multiline rows={7} value={description} onChange={handleBiographyChange} size="small" label="Shop Description" variant="outlined" fullWidth />
                            </Grid>
                        </Grid>
                    </Grid>
                    <Grid item xs={12} md={12} >
                        <Grid container spacing={4} sx={{paddingTop:"2%"}}>
                            <Grid item xs={12} md={6} sx={{paddingTop:"2%"}}>
                                <TextField id="outlined-basic" label="Social Media 1" value={social1} onChange={handleSocial1Change} type="url" size="small" variant="outlined" fullWidth />
                            </Grid>
                            <Grid item xs={12} md={6} sx={{paddingTop:"2%"}}>
                                <TextField id="outlined-basic" label="Social Media 2" value={social2} onChange={handleSocial2Change} type="url" size="small" variant="outlined" fullWidth />
                            </Grid>
                            <Grid item xs={12} md={6} sx={{paddingTop:"2%"}}>
                                <TextField id="outlined-basic" label="Social Media 3" value={social3} onChange={handleSocial3Change} type="url" size="small" variant="outlined" fullWidth />
                            </Grid>
                            <Grid item xs={12} md={6} sx={{paddingTop:"2%"}}>
                                <TextField id="outlined-basic" label="Social Media 4" value={social4} onChange={handleSocial4Change} type="url" size="small" variant="outlined" fullWidth />
                            </Grid>
                            <Grid item xs={12} md={12} sx={{paddingTop:"2%"}}>
                                <TextField id="outlined-basic" multiline rows={5} size="small" label="Your request guidelines" value={guidelines} onChange={handleGuidelinesChange} variant="outlined" fullWidth />
                            </Grid> 
                        </Grid>
                    </Grid>
                </Grid>
            </CardContent>
        </Card>
    </Grid>
        <Grid item xs={12} md={6}>
            <Card id="portfolio">
                <CardContent>
                    {(profileData != null) ? (
                    <EditableArtistPortfolio artistId={profileData["id"]}/>):null}
                </CardContent>
            </Card>
        </Grid>
    </Grid>
    )}
    </>
  );
};

// Protected route, checking user authentication client-side.(CSR)
export default withPageAuthRequired(ArtistSettings);