import React, { useMemo, useState } from 'react';
import { Link } from 'react-router-dom';
import { useAuthStore } from '../../stores/authStore';
import { menuForRole } from './SettingsLayout';
import { SearchHeaderP } from '../../pages/subscriptionIcons';

/**
 * PurchaseSubscriptionSidebar — settings sub-navigation styled after
 * clinic-pro-tauri's `PurchaseSubscriptionSidebar.jsx` (title + search + tab
 * list, orange active pill #f17732). Desktop-only, like the rest of the
 * clinicpro settings area (mobile nav is owned by the standalone settings list
 * page). Each item is a real admin route (SETTINGS_MENU / menuForRole) so the
 * routing architecture is preserved. `active` marks the open section.
 */
export default function PurchaseSubscriptionSidebar({ active }: { active: string }) {
  const primaryRole = useAuthStore((s) => s.primaryRole);
  const [query, setQuery] = useState('');
  const items = useMemo(
    () => menuForRole(primaryRole).filter((i) => i.label.includes(query.trim())),
    [primaryRole, query],
  );

  return (
    <aside
      dir="rtl"
      aria-label="منوی تنظیمات"
      className="hidden lg:block"
      style={{ alignSelf: 'start', position: 'sticky', top: 'calc(var(--topbar-h) + 16px)' }}
    >
      <div style={{
        fontSize: 16, fontWeight: 800, color: 'var(--text-2)', textAlign: 'right',
        marginBottom: 10, padding: '0 4px',
      }}>
        تنظیمات
      </div>

      <div style={{ marginBottom: 16 }}>
        <div style={{
          display: 'flex', alignItems: 'center', gap: 8,
          background: 'var(--surface)', border: '1px solid var(--border)',
          borderRadius: 'var(--r-sm)', padding: '8px 12px',
        }}>
          <SearchHeaderP />
          <input
            value={query}
            onChange={(e) => setQuery(e.target.value)}
            placeholder="جستجو در تنظیمات"
            aria-label="جستجو در تنظیمات"
            style={{
              border: 'none', outline: 'none', background: 'transparent',
              fontFamily: 'inherit', fontSize: 13, color: 'var(--text)', width: '100%',
              textAlign: 'right', direction: 'rtl',
            }}
          />
        </div>
      </div>

      <nav>
        {items.map((item) => {
          const isActive = item.key === active;
          const rowStyle: React.CSSProperties = {
            borderRadius: 12, height: 44, marginBottom: 8,
            display: 'flex', alignItems: 'center', justifyContent: 'flex-start',
            padding: '0 14px', fontSize: 16, fontWeight: isActive ? 700 : 500,
            lineHeight: 1, textAlign: 'right',
            background: isActive ? '#f17732' : 'transparent',
            color: isActive ? '#FFFFFF' : 'var(--text-2)',
            cursor: item.to ? 'pointer' : 'not-allowed',
            transition: 'background .14s',
          };
          const inner = <span style={{ flex: 1 }}>{item.label}</span>;
          if (!item.to) {
            return <div key={item.key} style={{ ...rowStyle, opacity: 0.55 }}>{inner}</div>;
          }
          return (
            <Link
              key={item.key}
              to={item.to}
              aria-current={isActive ? 'page' : undefined}
              style={rowStyle}
              onMouseEnter={(e) => { if (!isActive) (e.currentTarget as HTMLElement).style.background = 'var(--surface-2)'; }}
              onMouseLeave={(e) => { if (!isActive) (e.currentTarget as HTMLElement).style.background = 'transparent'; }}
            >
              {inner}
            </Link>
          );
        })}
        {items.length === 0 && (
          <div style={{ padding: '12px 4px', fontSize: 13, color: 'var(--text-3)', textAlign: 'center' }}>
            موردی یافت نشد
          </div>
        )}
      </nav>
    </aside>
  );
}
