import { useCallback, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { BarChart3, ListChecks } from 'lucide-react';
import type { AlwaysOnSubTab, Project } from '../../types/app';
import { cn } from '../../lib/utils.js';
import AlwaysOnDashboard from './AlwaysOnDashboard';
import PlansAndCronJobs from './PlansAndCronJobs';
import RunDetail from './RunDetail';

type PlanDetailTarget = {
  planId: string;
  projectName: string;
  projectDisplayName: string;
  sourceRunId: string;
  projectKey: string;
};

const SUB_TABS: { id: AlwaysOnSubTab; labelKey: string; defaultLabel: string; icon: typeof BarChart3 }[] = [
  { id: 'dashboard', labelKey: 'tabs.dashboard', defaultLabel: 'Dashboard', icon: BarChart3 },
  { id: 'plans-cron', labelKey: 'tabs.plansCron', defaultLabel: 'Plans & Cron Jobs', icon: ListChecks },
];

type AlwaysOnV2Props = {
  selectedProject: Project | null;
  onApplyWorkCycle?: (projectName: string, cycleId: string) => Promise<void>;
  onOpenExecutionSession?: (projectKey: string, runId: string, projectName?: string) => void;
};

export default function AlwaysOnV2({ selectedProject, onApplyWorkCycle, onOpenExecutionSession }: AlwaysOnV2Props) {
  const { t } = useTranslation('alwaysOn');
  const [subTab, setSubTab] = useState<AlwaysOnSubTab>('dashboard');
  const [planDetail, setPlanDetail] = useState<PlanDetailTarget | null>(null);

  const handleOpenPlanDetail = useCallback(
    (planId: string, projectName: string, projectDisplayName: string, sourceRunId: string, projectKey: string) => {
      setPlanDetail({ planId, projectName, projectDisplayName, sourceRunId, projectKey });
    },
    [],
  );

  if (!selectedProject) {
    return (
      <div className="flex h-full items-center justify-center bg-white text-[13px] text-neutral-500 dark:bg-neutral-950 dark:text-neutral-400">
        {t('emptyProject', { defaultValue: 'Pick a project to view Always-On.' })}
      </div>
    );
  }

  return (
    <div className="flex h-full flex-col bg-white dark:bg-neutral-950">
      {/* Sub-tab bar */}
      <div className="flex shrink-0 gap-1 border-b border-neutral-200 px-8 pt-4 dark:border-neutral-800">
        {SUB_TABS.map((tab) => {
          const Icon = tab.icon;
          const isActive = subTab === tab.id;
          return (
            <button
              key={tab.id}
              type="button"
              onClick={() => setSubTab(tab.id)}
              className={cn(
                'inline-flex items-center gap-1.5 border-b-2 px-3 pb-2 text-[13px] font-medium transition-colors',
                isActive
                  ? 'border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400'
                  : 'border-transparent text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200',
              )}
            >
              <Icon className="h-3.5 w-3.5" strokeWidth={1.75} />
              {t(tab.labelKey, { defaultValue: tab.defaultLabel })}
            </button>
          );
        })}
      </div>

      {/* Sub-tab content */}
      <div className="min-h-0 flex-1 overflow-y-auto">
        {planDetail ? (
          <RunDetail
            planId={planDetail.planId}
            projectName={planDetail.projectName}
            projectDisplayName={planDetail.projectDisplayName}
            runId={planDetail.sourceRunId}
            projectKey={planDetail.projectKey}
            backLabel={t('dashboard.runDetail.backToPlans', { defaultValue: 'Back to Plans & Cron Jobs' })}
            onBack={() => setPlanDetail(null)}
            onOpenExecutionSession={onOpenExecutionSession}
          />
        ) : subTab === 'dashboard' ? (
          <AlwaysOnDashboard onOpenExecutionSession={onOpenExecutionSession} />
        ) : (
          <PlansAndCronJobs onApplyWorkCycle={onApplyWorkCycle} onOpenPlanDetail={handleOpenPlanDetail} />
        )}
      </div>
    </div>
  );
}