import React, { useState } from 'react';
import { Modal, Form, Input, notification, Button } from 'antd';
import { changePassword } from '../service';
import { EyeOutlined, EyeInvisibleOutlined } from '@ant-design/icons';
import { changeNewPasswordValidator } from '@/utills/validator';
interface ChangePasswordModalProps {
    employeeId: number | null
    visible: boolean
    onCancel: () => void
    onOk: () => void
}

const ChangePasswordPage: React.FC<ChangePasswordModalProps> = ({
  visible,
  onCancel,
  onOk,
  employeeId,
}) => {
  const [form] = Form.useForm();
  const [passwordVisible, setPasswordVisible] = useState<boolean>(false);
  const [confirmPasswordVisible, setConfirmPasswordVisible] = useState<boolean>(false);
  const [loading, setLoading] = useState<boolean>(false);

  const handleOk = (): void => {
    form.validateFields()
      .then((values) => {
        setLoading(true);
        changePassword({ employeeId, password: values?.newPassword, is_admin: true })
          .then((response) => {
            if (response?.status === 200) {
              notification.success({
                message: 'Success',
                description: response?.data?.message,
              });
              onOk();
              setLoading(false);
            } else {
              notification.error({
                message: 'Error',
                description: 'Failed to Change Password',
              });
            }
          })
          .catch((error) => {
            const { message } = error?.response?.data || {};
            notification.error({
              message: 'Error',
              description: message,
            });
            setLoading(false);
          })
          .finally(() => {
            setLoading(false);
          });
      })
      .catch((error) => {
        console.error('error: ', error);
      });
  };

  return (
    <Modal
      title="Change Password"
      visible={visible}
      onOk={handleOk}
      onCancel={onCancel}
      footer={
        <div style={{ textAlign: 'right' }}>
          <Button onClick={onCancel} style={{ marginRight: 10 }}>
                        Cancel
          </Button>
          <Button type="primary" loading={loading} onClick={handleOk}>
                        Update & Save
          </Button>
        </div>
      }
      className="custom-new-modal w-600">
      <Form
        form={form}
        colon={false}
        labelAlign="left"
        labelCol={{ span: 8 }}
        wrapperCol={{ span: 16 }}>
        <Form.Item
          label="New Password"
          name="newPassword"
          rules={[{ required: true, validator: changeNewPasswordValidator }]}>
          <Input.Password
            placeholder="New Password"
            type={passwordVisible ? 'text' : 'password'}
            suffix={
              <span
                style={{ cursor: 'pointer' }}
                onClick={() => {
                  setPasswordVisible(!passwordVisible);
                }}>
                {passwordVisible ? <EyeOutlined /> : <EyeInvisibleOutlined />}
              </span>
            }
          />
        </Form.Item>
        <Form.Item
          label="Re-Enter New Password"
          name="confirmPassword"
          dependencies={['newPassword']}
          rules={[
            { required: true, message: 'Please Enter Confirm Password' },
            ({ getFieldValue }) => ({
              async validator(_, value) {
                if (value === undefined || getFieldValue('newPassword') === value) {
                  await Promise.resolve();
                  return;
                }
                return await Promise.reject(
                  new Error('New And Confirm Password Are Not Match')
                );
              },
            }),
          ]}>
          <Input.Password
            placeholder="Confirm Password"
            type={confirmPasswordVisible ? 'text' : 'password'}
            suffix={
              <span
                style={{ cursor: 'pointer' }}
                onClick={() => {
                  setConfirmPasswordVisible(!confirmPasswordVisible);
                }}>
                {confirmPasswordVisible ? (
                  <EyeOutlined />
                ) : (
                  <EyeInvisibleOutlined />
                )}
              </span>
            }
          />
        </Form.Item>
      </Form>
    </Modal>
  );
};

export default ChangePasswordPage;
