import { useState } from 'react';
// material-ui
import {
Avatar,
Button,
FormControlLabel,
Grid,
InputLabel,
MenuItem,
Paper,
Select,
Stack,
Switch,
TextField,
Typography,
useMediaQuery,
useTheme
} from '@mui/material';
import { MdPersonAddAlt1 } from 'react-icons/md';
import { useMutation } from '@tanstack/react-query';
// project import
import MainCard from 'components/MainCard';
import { createAdminTenant } from 'pages/api/doormileApi';
import Loader from 'components/Loader';
import { enqueueSnackbar } from 'notistack';
import { useNavigate } from 'react-router';
import { DT, tint } from 'themes/dt/tokens';
const Createclient = () => {
const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down('md'));
const navigate = useNavigate();
const [tenantname, setTenantname] = useState('');
const [primaryemail, setPrimaryemail] = useState('');
const [primarycontact, setPrimarycontact] = useState('');
// Confirmed live: POST /admin/tenants doesn't reject lowercase status, but
// stores it exactly as sent — every real tenant uses "Active" (title
// case), so a lowercase one would be inconsistent with the rest of the
// data even though the request itself succeeds.
const [status, setStatus] = useState('Active');
const [requiredeliveryotp, setRequiredeliveryotp] = useState(false);
const opentoast = (message) => {
enqueueSnackbar(message, {
variant: 'error',
anchorOrigin: { vertical: 'top', horizontal: 'right' },
autoHideDuration: 2000
});
};
const createTenantMutation = useMutation({
mutationFn: (payload) => createAdminTenant(payload),
onSuccess: (res) => {
if (res.success) {
enqueueSnackbar('Client created successfully', {
variant: 'success',
anchorOrigin: { vertical: 'top', horizontal: 'right' },
autoHideDuration: 2000
});
navigate('/doormile/tenants');
} else {
opentoast(res.message || 'Client already exists');
}
},
onError: (err) => {
opentoast(err.response?.data?.message || err.message || 'Failed to create client');
}
});
const createprofile = () => {
if (!tenantname) {
opentoast('Fill Client / Business Name');
} else if (!primarycontact || primarycontact.length !== 10) {
opentoast('Fill a valid 10-digit Contact Number');
} else if (!primaryemail) {
opentoast('Fill Primary Email');
} else {
// POST /admin/tenants — requiredeliveryotp is a pointer server-side;
// it's opt-in and off by default, so we only send it when the operator
// explicitly turns it on rather than always sending false.
const obj = {
tenantname,
primaryemail,
primarycontact,
status,
...(requiredeliveryotp ? { requiredeliveryotp: true } : {})
};
createTenantMutation.mutate(obj);
}
};
return (
<>
{createTenantMutation.isPending && }
Create Client
Client / Business Name
setTenantname(e.target.value)}
value={tenantname}
autoComplete="off"
/>
Status
Primary Contact Number
{
if (e.target.value.toString().length <= 10) {
setPrimarycontact(e.target.value);
}
}}
value={primarycontact}
autoComplete="off"
/>
Primary Email
setPrimaryemail(e.target.value)}
value={primaryemail}
autoComplete="off"
/>
setRequiredeliveryotp(e.target.checked)} />}
label="Require delivery OTP for this client (off by default)"
/>
>
);
};
export default Createclient;