import MuiDialog from "@/components/MuiDialog";
import { Button, Card, Checkbox, DialogActions, Grid, TextField, TextareaAutosize, Typography, Select } from "@mui/material";
import { Paper } from "@mui/material";
import { Stack } from '@mui/material';
import React, { useEffect, useState } from 'react';
import { fDateOnly, fDateTimesecond, toTitleCase } from "@/utils/formatTime";
import axios from "@/utils/axios";
import { enqueueSnackbar } from "notistack";
import { useNavigate, useParams } from "react-router";
import { RHFSelect, RHFTextField, RHFEditor } from "@/components/hook-form";
import { Autocomplete } from "@mui/material";
// import { RHFEditor } from "@/components/hook-form/v2";


type DialogConfirmationType = {
    openDialog: boolean;
    setOpenDialog: any;
    onSubmit?: void;
    member: {
        member_id:string,
        birth_date:string,
        gender:string,
        reason:string
    }; 
}

export default function DialogEditMember({member, setOpenDialog, openDialog, onSubmit} : DialogConfirmationType ) {
    const navigate = useNavigate();
    const { corporate_id } = useParams();

    const [formData, setFormData] = useState({
        member_id: member?.member_id,
        gender: member?.gender,
        birth_date: member?.birth_date,
        reason: member?.reason,
    });

    const [isReasonSelected, setIsReasonSelected] = useState(true);
    
    useEffect(() => {
        // Update formData setiap kali requestLog berubah
        setFormData({
            member_id: member?.member_id || '',
            gender: member?.gender || '',
            birth_date: member?.birth_date || '',
            reason: member?.reason || '',

        });
      }, [member]);

    const handleChange = (field, value) => {
        setFormData((prevData) => ({
            ...prevData,
            [field]: value,
        }));
        if (field === 'reason') {
            setIsReasonSelected(!!value);
        }

    };

    const handleApprove = () => {
        setFormData((prevData) => ({
            ...prevData,
        }));
        handleSubmit();
    };
    

    const handleSubmit = () => {
        if (isReasonSelected && formData.reason !== '') {
            axios
                .post(`members/update`, formData)
                .then((response) => {
                    enqueueSnackbar('Update Member Success', { variant: 'success' });
                    setOpenDialog(false);
                    navigate(`/corporates/${corporate_id}/members`)
                    window.location.reload()
                })
                .catch(({ response }) => {
                    enqueueSnackbar(response.data.message ?? 'Something went wrong!', { variant: 'error' });
                });
        } else {
            setIsReasonSelected(false);
            alert('Silakan pilih alasan sebelum mengirimkan data.');
        }
    }

    const style1 = {
        color: '#919EAB',
        width: '30%'
    }
    const style2 = {
        width: '70%'
    }
    const marginBottom1 = {
        marginBottom: 1,
    }

    const marginBottom2 = {
        marginBottom: 2,
    }

    const resetForm = () => {
        setFormData({
            member_id: member?.member_id ?? '',
            gender: member?.gender ?? '',
            birth_date: member?.birth_date ?? '',
            reason: member?.reason ?? '',
            
        });
    };

    const handleCloseDialog = () => {
        setOpenDialog(false);
        resetForm();
    }

    const handleNumericInput = (input: any) => {
        const numericInput = input.replace(/\D/g, '');
        return numericInput;
    };

    const reasons = [
        { value: 'agreement', label: 'Agreement changed' },
        { value: 'endorsement', label: 'Endorsement' },
        { value: 'renewal', label: 'Renewal' },
        { value: 'wrong_setting', label: 'Wrong Setting' },
        // Add more options as needed
    ];

    const gender = [
        { value: 'male', label: 'Male' },
        { value: 'female', label: 'Female' },
        { value: '-', label: 'Other' },
        // Add more options as needed
    ];

    const getContent = () => (
        <Stack spacing={1} marginTop={2}>
            <Typography variant="subtitle2">Are you sure to update this member ?</Typography>
            <Grid item xs={12} md={12} marginTop={4}>
                    <Card sx={{padding:2, marginTop:2}}  >
                        <Stack direction='row' spacing={2} sx={marginBottom2}>
                            <Typography variant='subtitle2' sx={style1} gutterBottom>Birth Date</Typography>
                            <TextField
                                label="Brith Date"
                                variant="outlined"
                                fullWidth
                                type="date"
                                value={formData.birth_date ? fDateOnly(formData.birth_date) : ''}
                                onChange={(e) => handleChange('birth_date', e.target.value)}
                            />
                        </Stack>
                        <Stack direction='row' spacing={2} sx={marginBottom2}>
                            <Typography variant='subtitle2' sx={style1} gutterBottom>Gender</Typography>
                            <Autocomplete
                                options={gender}
                                getOptionLabel={(option) => option.label}
                                fullWidth
                                value={gender.find((r) => r.value === formData.gender) || null} // Use find to match the default value
                                onChange={(e, newValue) => handleChange('gender', newValue?.value)}
                                renderInput={(params) => (
                                    <TextField
                                        {...params}
                                        label="Gender"
                                        variant="outlined"

                                    />
                                )}
                            />
                        </Stack>
                        <Stack direction='row' spacing={2} sx={marginBottom2}>
                            <Typography variant='subtitle2' sx={style1} gutterBottom>Reason*</Typography>
                            <Autocomplete
                                options={reasons}
                                getOptionLabel={(option) => option.label}
                                fullWidth
                                value={reasons.find((r) => r.value === formData.reason) || null} // Use find to match the default value
                                onChange={(e, newValue) => handleChange('reason', newValue?.value)}
                                renderInput={(params) => (
                                    <TextField
                                        {...params}
                                        label="Reason"
                                        variant="outlined"
                                        required
                                        error={!isReasonSelected} // Menandai input sebagai salah jika opsi tidak dipilih
                                        helperText={!isReasonSelected ? 'Alasan harus dipilih' : ''}

                                    />
                                )}
                            />
                        </Stack>
                    </Card>
                </Grid>
                <DialogActions>
                    <Button variant="outlined" sx={{color: '#212B36', borderColor: '#919EAB52'}} onClick={handleCloseDialog}>Cancel</Button>
                    <Button color="primary"  variant="contained" onClick={() => handleApprove()}>Update</Button>
                </DialogActions>
        </Stack>
      );


    return (
        <MuiDialog
          title={{name: "Update Information Member"}}
          openDialog={openDialog}
          setOpenDialog={setOpenDialog}
          content={getContent()}
          maxWidth="xl"
        />
      );
}