import React, { useRef } from 'react';
import { useForm, Head } from '@inertiajs/react';
import { Button, Card, Col, Container, Form, Row } from 'react-bootstrap';
import Layout from '../../../Layouts';
import Swal from 'sweetalert2';

export default function CambiarPassword({ auth }: any) {
    const passwordInput: any = useRef();
    const currentPasswordInput: any = useRef();

    const { data, setData, errors, put, reset, processing, recentlySuccessful } = useForm({
        current_password: '',
        password: '',
        password_confirmation: '',
    });

    const updatePassword = (e: any) => {
        e.preventDefault();

        put(route('profile.password.update'), {
            preserveScroll: true,
            onSuccess: () => {
                reset();
                Swal.fire({
                    title: 'Contraseña Actualizada',
                    text: 'Tu contraseña ha sido modificada correctamente.',
                    icon: 'success',
                    timer: 2000,
                    showConfirmButton: false
                });
            },
            onError: (errors) => {
                if (errors.password) {
                    reset('password', 'password_confirmation');
                    passwordInput.current.focus();
                }

                if (errors.current_password) {
                    reset('current_password');
                    currentPasswordInput.current.focus();
                }
            },
        });
    };

    return (
        <React.Fragment>
            <Layout>
                <Head title="Cambiar Contraseña | ENEON" />
                <div className='page-content'>
                    <Container fluid>
                        <Row className="justify-content-center">
                            <Col md={8} lg={6} xl={5}>
                                <Card className="mt-4">
                                    <Card.Header className="align-items-center d-flex">
                                        <h4 className="card-title mb-0 flex-grow-1">Cambiar Contraseña</h4>
                                    </Card.Header>
                                    <Card.Body className="p-4">
                                        <div className="text-center mb-4">
                                            <div className="avatar-md mx-auto mb-4">
                                                <div className="avatar-title bg-light rounded-circle text-primary h1">
                                                    <i className="bx bxs-lock-alt"></i>
                                                </div>
                                            </div>
                                            <p className="text-muted mb-0">
                                                Su nueva contraseña debe ser diferente a la anterior y tener al menos 8 caracteres.
                                            </p>
                                        </div>

                                        <Form onSubmit={updatePassword}>
                                            <div className="mb-3">
                                                <Form.Label htmlFor="current_password">Contraseña Actual</Form.Label>
                                                <Form.Control
                                                    id="current_password"
                                                    ref={currentPasswordInput}
                                                    value={data.current_password}
                                                    onChange={(e: any) => setData('current_password', e.target.value)}
                                                    type="password"
                                                    className={`form-control ${errors.current_password ? 'is-invalid' : ''}`}
                                                    autoComplete="current-password"
                                                    placeholder="Ingrese su contraseña actual"
                                                />
                                                <Form.Control.Feedback type="invalid">{errors.current_password}</Form.Control.Feedback>
                                            </div>

                                            <div className="mb-3">
                                                <Form.Label htmlFor="password">Nueva Contraseña</Form.Label>
                                                <Form.Control
                                                    id="password"
                                                    ref={passwordInput}
                                                    value={data.password}
                                                    onChange={(e: any) => setData('password', e.target.value)}
                                                    type="password"
                                                    className={`form-control ${errors.password ? 'is-invalid' : ''}`}
                                                    autoComplete="new-password"
                                                    placeholder="Ingrese nueva contraseña"
                                                />
                                                <Form.Control.Feedback type="invalid">{errors.password}</Form.Control.Feedback>
                                            </div>

                                            <div className="mb-3">
                                                <Form.Label htmlFor="password_confirmation">Confirmar Nueva Contraseña</Form.Label>
                                                <Form.Control
                                                    id="password_confirmation"
                                                    value={data.password_confirmation}
                                                    onChange={(e: any) => setData('password_confirmation', e.target.value)}
                                                    type="password"
                                                    className={`form-control ${errors.password_confirmation ? 'is-invalid' : ''}`}
                                                    autoComplete="new-password"
                                                    placeholder="Confirme nueva contraseña"
                                                />
                                                <Form.Control.Feedback type="invalid">{errors.password_confirmation}</Form.Control.Feedback>
                                            </div>

                                            <div className="mt-4 text-end">
                                                <Button
                                                    variant="success"
                                                    disabled={processing}
                                                    type="submit"
                                                    className="w-100"
                                                >
                                                    {processing ? 'Actualizando...' : 'Actualizar Contraseña'}
                                                </Button>
                                            </div>
                                        </Form>
                                    </Card.Body>
                                </Card>
                            </Col>
                        </Row>
                    </Container>
                </div>
            </Layout>
        </React.Fragment>
    );
}
