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

type ThreadRow = {
  id: number;
  subject?: string | null;
  account_name?: string | null;
  contact_name?: string | null;
  last_message_at?: string | null;
  is_active?: boolean;
};

type ActiveMessage = {
  id: number;
  from_name?: string | null;
  from_email?: string | null;
  subject?: string | null;
  body_text?: string | null;
  body_html?: string | null;
  sent_at?: string | null;
  is_inbound?: boolean;
};

type ActiveThread = {
  id: number;
  subject?: string | null;
  account_name?: string | null;
  contact_name?: string | null;
  messages: ActiveMessage[];
};

type InboxIndexProps = {
  title?: string;
  threads?: ThreadRow[];
  activeThread?: ActiveThread | null;
  filters?: {
    account_id?: number | null;
    contact_id?: number | null;
    type?: string | null;
  };
};

function formatDate(value?: string | null) {
  if (!value) return '';
  try {
    return new Date(value).toLocaleString();
  } catch {
    return value;
  }
}

export default function InboxIndex({
  title = 'Inbox',
  threads = [],
  activeThread = null,
  filters = {
    account_id: null,
    contact_id: null,
    type: 'email',
  },
}: InboxIndexProps) {
  return (
    <MainLayout title={title}>
      <Head title={title} />

      <div className="gd-page-index gd-inbox-page gd-account-show-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">Inbox</h4>
              </div>

              <div className="mt-3 mt-sm-0 d-flex gap-2 align-items-center">
                <Form.Control
                  placeholder="Search inbox"
                  className="gd-inbox-top-search"
                  disabled
                />
                <Button
                  type="button"
                  size="sm"
                  className="btn-gd-primary"
                  disabled
                >
                  Search
                </Button>
                <Button
                  type="button"
                  size="sm"
                  className="btn-gd-secondary"
                  disabled
                >
                  Clear
                </Button>
              </div>
            </div>
          </Col>
        </Row>

        <div className="account-header-bar gd-inbox-header-bar">
          <div className="d-flex align-items-center justify-content-between gap-2 w-100">
            <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">
                Inbox
              </div>
            </div>

            <div className="d-flex align-items-center gap-2 flex-nowrap ms-auto">
            <button
              type="button"
              className="btn-icon"
              title="Refresh"
                onClick={() => {
                  router.post('/messages/inbox/refresh', {}, {
                    onSuccess: () => {
                      router.reload({ only: ['threads', 'activeThread'] });
                    }
                  });
                }}
            >
              <IconifyIcon icon="tabler:refresh" />
            </button>

              <button
                type="button"
                className="btn-icon"
                title="Settings"
                disabled
              >
                <IconifyIcon icon="tabler:settings" />
              </button>
            </div>
          </div>
        </div>

        <div className="gd-index-strip">
          <div className="d-flex align-items-center justify-content-between">
            <div className="d-flex align-items-center gap-2">
              <span className="gd-index-strip-title">Threads</span>
              <span className="gd-index-strip-meta">({threads.length})</span>
            </div>
            <span className="gd-index-strip-right">Preview</span>
          </div>
        </div>

        <Card className="gd-list-card gd-inbox-card shadow-sm border-0">
          <Card.Body className="p-0">
            <Row className="g-0 gd-inbox-main-row">
              <Col md={4} lg={4} className="border-end">
                <div className="p-3">
                  <div
                    className="text-uppercase fw-semibold mb-3"
                    style={{ fontSize: '0.9rem' }}
                  >
                    Threads
                  </div>

                  {threads.length === 0 ? (
                    <div className="text-muted small">
                      No inbox threads yet.
                    </div>
                  ) : (
                    threads.map((thread) => (
                      <div
                        key={thread.id}
                        className={`inbox-thread-row cursor-pointer row-hover${thread.is_active ? ' table-active' : ''}`}
                        onClick={() => {
                          window.location.href = `/messages/inbox?thread=${thread.id}`;
                        }}
                      >
                        <div className="fw-semibold text-truncate">
                          {thread.subject || '(no subject)'}
                        </div>
                        <div className="text-muted small text-truncate">
                          {thread.account_name || 'No account linked'}
                        </div>
                        <div className="text-muted small text-truncate">
                          {thread.contact_name || 'No contact linked'}
                        </div>
                        <div className="text-xs text-gray-500">
                          {thread.message_count} messages
                        </div>                        
                      </div>
                    ))
                  )}
                </div>
              </Col>

              <Col md={8} lg={8}>
                <div className="p-3">
                  {!activeThread ? (
                    <div className="text-muted">
                      Choose a thread to view details.
                    </div>
                  ) : (
                    <>
                      <div className="inbox-detail-subject border-bottom pb-2 mb-3">
                        <div className="fw-semibold fs-4">
                          {activeThread.subject || '(no subject)'}
                        </div>

                        <div className="text-muted small mt-2">
                          {activeThread.account_name || 'No account linked'}
                          {' • '}
                          {activeThread.contact_name || 'No contact linked'}
                        </div>
                      </div>

                      {activeThread.messages.length === 0 ? (
                        <div className="text-muted small">
                          No messages in this thread.
                        </div>
                      ) : (
                        activeThread.messages.map((message) => (
                          <div key={message.id} className="mb-4 pb-3 border-bottom">
                            <div className="fw-semibold">
                              {message.from_name || 'Unknown sender'}
                            </div>

                            <div className="text-muted small mb-1">
                              {message.from_email || ''}
                            </div>

                            <div className="text-muted small mb-2">
                              {formatDate(message.sent_at)}
                            </div>

                            <div className="small inbox-message-body">
                              {message.body_html ? (
                                <div
                                  dangerouslySetInnerHTML={{ __html: message.body_html }}
                                />
                              ) : (
                                <div style={{ whiteSpace: 'pre-wrap' }}>
                                  {message.body_text || '(no message body)'}
                                </div>
                              )}
                            </div>
                          </div>
                        ))
                      )}
                    </>
                  )}
                </div>
              </Col>
            </Row>
          </Card.Body>
        </Card>
      </div>
    </MainLayout>
  );
}