import { AppBar, Autocomplete, CircularProgress, Dialog, IconButton, TextField, Toolbar } from '@mui/material'
import { Fragment, useState } from 'react'
import { IRegion } from '../interfaces/fuel'
import { useServerIps, useServers } from '../hooks/swrHooks'
import FullFeaturedCrudGrid from './TableEditable'
import ServerService from '../services/ServersService'
import { GridColDef } from '@mui/x-data-grid'
import { Close } from '@mui/icons-material'
import ServerData from './ServerData'

export default function ServerIpsView() {
    const [open, setOpen] = useState(false)
    const [selectedOption, setSelectedOption] = useState<IRegion | null>(null)
    const { servers, isLoading } = useServers()

    const [serverDataOpen, setServerDataOpen] = useState(false)
    const [currentServerData, setCurrentServerData] = useState<any | null>(null)

    const handleInputChange = (value: string) => {
        return value
    }

    const handleOptionChange = (value: IRegion | null) => {
        setSelectedOption(value)
    }

    const { serverIps, isLoading: serversLoading } = useServerIps(selectedOption?.id, 0, 10)

    const serverIpsColumns: GridColDef[] = [
        { field: 'id', headerName: 'ID', type: 'number' },
        { field: 'server_id', headerName: 'Server ID', type: 'number' },
        { field: 'name', headerName: 'Название', type: 'string' },
        { field: 'is_actual', headerName: 'Действителен', type: 'boolean' },
        { field: 'ip', headerName: 'IP', type: 'string' },
        { field: 'servername', headerName: 'Название сервера', type: 'string' },
    ]

    return (
        <>
            <Dialog
                fullScreen
                open={serverDataOpen}
                onClose={() => {
                    setServerDataOpen(false)
                }}
                aria-labelledby="modal-modal-title"
                aria-describedby="modal-modal-description">
                <AppBar sx={{ position: 'sticky' }}>
                    <Toolbar>
                        <IconButton
                            edge="start"
                            color="inherit"
                            onClick={() => {
                                setServerDataOpen(false)
                            }}
                            aria-label="close"
                        >
                            <Close />
                        </IconButton>
                    </Toolbar>
                </AppBar>

                {currentServerData &&
                    <ServerData
                        id={currentServerData?.id}
                        region_id={currentServerData?.region_id}
                        name={currentServerData?.name}
                    />
                }
            </Dialog>

            {serversLoading ?
                <CircularProgress />
                :
                <FullFeaturedCrudGrid
                    autoComplete={
                        <Autocomplete
                            open={open}
                            onOpen={() => {
                                setOpen(true)
                            }}
                            onClose={() => {
                                setOpen(false)
                            }}
                            onInputChange={(_, value) => handleInputChange(value)}
                            onChange={(_, value) => handleOptionChange(value)}
                            filterOptions={(x) => x}
                            isOptionEqualToValue={(option: IRegion, value: IRegion) => option.name === value.name}
                            getOptionLabel={(option: IRegion) => option.name ? option.name : ""}
                            options={servers || []}
                            loading={isLoading}
                            value={selectedOption}
                            renderInput={(params) => (
                                <TextField
                                    {...params}
                                    size='small'
                                    label="Сервер"
                                    InputProps={{
                                        ...params.InputProps,
                                        endAdornment: (
                                            <Fragment>
                                                {isLoading ? <CircularProgress color="inherit" size={20} /> : null}
                                                {params.InputProps.endAdornment}
                                            </Fragment>
                                        )
                                    }} />
                            )} />}
                    onSave={() => {
                    }}
                    onDelete={ServerService.removeServer}
                    initialRows={serverIps || []}
                    columns={serverIpsColumns}
                    actions
                    onRowClick={(params) => {
                        setCurrentServerData(params.row)
                        setServerDataOpen(true)
                    }} loading={false} />
            }
        </>
    )
}