import MainLayout from '@/layouts/MainLayout';
import { Head, Link, useForm } from '@inertiajs/react';
import { Card, CardBody, Row, Col, Form, FormControl, Button } from 'react-bootstrap';
import IconifyIcon from '@/components/wrappers/IconifyIcon';

type Props = {
  back: string;
  initial?: {
    login_email?: string;
    imap_host?: string;
    imap_port?: number | string;
    imap_encryption?: string;
    imap_username?: string;
    smtp_host?: string;
    smtp_port?: number | string;
    smtp_encryption?: string;
    smtp_username?: string;
    has_imap_password?: boolean;
    has_smtp_password?: boolean;
  };
};

export default function ConnectEmail({ back, initial }: Props) {
const { data, setData, post, processing, errors } = useForm({
  login_email: initial?.login_email ?? '',

  imap_host: initial?.imap_host ?? '',
  imap_port: initial?.imap_port ?? 993,
  imap_encryption: initial?.imap_encryption ?? 'ssl',
  imap_username: initial?.imap_username ?? '',
  imap_password: '', // NEVER preload passwords

  smtp_host: initial?.smtp_host ?? '',
  smtp_port: initial?.smtp_port ?? 465,
  smtp_encryption: initial?.smtp_encryption ?? 'ssl',
  smtp_username: initial?.smtp_username ?? '',
  smtp_password: '', // NEVER preload passwords
});

  const onSubmit = (e: React.FormEvent) => {
    e.preventDefault();
    post(route('inbox.connect.imap.save'));
  };

 return (
  <MainLayout title="Email Settings">
    <Head title="Email Settings" />

    <div className="gd-page-edit gd-inbox-page gd-account-show-page gd-email-connect-page">
      <Row>
        <Col xs={12}>
          <div className="page-title-head d-flex align-items-sm-center flex-sm-row flex-column">
            <div className="flex-grow-1">
              <h4 className="fs-18 fw-semibold m-0">Email Settings</h4>
            </div>
          </div>
        </Col>
      </Row>

      <div className="account-header-bar gd-inbox-header-bar">
        <div className="d-flex align-items-center gap-2 min-w-0">
        <IconifyIcon icon="tabler:mail" className="gd-inbox-header-icon" />
          <div className="account-show-title text-white text-truncate">
            Connect Email (IMAP/SMTP)
          </div>
        </div>
      </div>

      <Card className="gd-list-card shadow-sm border-0 rounded-top-0 mt-0">
        <CardBody>
            <Form onSubmit={onSubmit}>
            
              <div className="gd-form-section">
                <Row className="g-3">
                  <Col md={6}>
                    <label className="form-label">Login Email</label>
                    <FormControl
                      value={data.login_email}
                      onChange={e => setData('login_email', e.target.value)}
                      isInvalid={!!errors.login_email}
                    />
                    {errors.login_email && (
                      <div className="invalid-feedback d-block">{errors.login_email}</div>
                    )}
                  </Col>
                </Row>
              </div>
            
              <div className="gd-form-section">
                <h5>IMAP (incoming)</h5>
                <Row className="g-3">
                  <Col md={5}>
                    <label className="form-label">Host</label>
                    <FormControl
                      value={data.imap_host}
                      onChange={e => setData('imap_host', e.target.value)}
                      isInvalid={!!errors.imap_host}
                    />
                  </Col>
                  <Col md={2}>
                    <label className="form-label">Port</label>
                    <FormControl
                      type="number"
                      value={data.imap_port}
                      onChange={e => setData('imap_port', e.target.value)}
                    />
                  </Col>
                  <Col md={2}>
                    <label className="form-label">Encryption</label>
                    <FormControl
                      value={data.imap_encryption ?? ''}
                      onChange={e => setData('imap_encryption', e.target.value)}
                      placeholder="ssl/tls"
                    />
                  </Col>
                  <Col md={3}>
                    <label className="form-label">Username</label>
                    <FormControl
                      value={data.imap_username}
                      onChange={e => setData('imap_username', e.target.value)}
                    />
                  </Col>
                  <Col md={4}>
                    <label className="form-label">Password</label>
                    <FormControl
                      type="password"
                      value={data.imap_password}
                      onChange={e => setData('imap_password', e.target.value)}
                      placeholder={initial?.has_imap_password ? '••••••••••' : ''}
                    />
                    <div className="form-text">
                      Leave blank to keep existing password.
                    </div>
                  </Col>
                </Row>
              </div>
            
              <div className="gd-form-section">
                <h5>SMTP (outgoing)</h5>
                <Row className="g-3">
                  <Col md={5}>
                    <label className="form-label">Host</label>
                    <FormControl
                      value={data.smtp_host}
                      onChange={e => setData('smtp_host', e.target.value)}
                    />
                  </Col>
                  <Col md={2}>
                    <label className="form-label">Port</label>
                    <FormControl
                      type="number"
                      value={data.smtp_port}
                      onChange={e => setData('smtp_port', e.target.value)}
                    />
                  </Col>
                  <Col md={2}>
                    <label className="form-label">Encryption</label>
                    <FormControl
                      value={data.smtp_encryption ?? ''}
                      onChange={e => setData('smtp_encryption', e.target.value)}
                      placeholder="ssl/tls"
                    />
                  </Col>
                  <Col md={3}>
                    <label className="form-label">Username</label>
                    <FormControl
                      value={data.smtp_username}
                      onChange={e => setData('smtp_username', e.target.value)}
                    />
                  </Col>
                  <Col md={4}>
                    <label className="form-label">Password</label>
                    <FormControl
                      type="password"
                      value={data.smtp_password}
                      onChange={e => setData('smtp_password', e.target.value)}
                      placeholder={initial?.has_smtp_password ? '••••••••••' : ''}
                    />
                    <div className="form-text">
                      Leave blank to keep existing password. If empty and no SMTP password exists, IMAP password will be used.
                    </div>
                  </Col>
                </Row>
              </div>
            
              <div className="mt-4 d-flex gap-2">
              <Link href={back} className="btn btn-gd-secondary">
                Cancel
              </Link>
              <Button type="submit" className="btn-gd-primary" disabled={processing}>
                Save
              </Button>
            </div>
          </Form>
        </CardBody>
      </Card>
    </div>
  </MainLayout>
); 
}
