'use client';

/**
 * 단가 상세/수정 페이지 (Client Component)
 * V2 패턴: 기본 조회(view), ?mode=edit로 수정 모드 전환
 *
 * 경로: /sales/pricing-management/[id]
 * 수정 모드: /sales/pricing-management/[id]?mode=edit
 */

import { use, useEffect, useState } from 'react';
import { useRouter, useSearchParams } from 'next/navigation';
import { PricingFormClient } from '@/components/pricing';
import { getPricingById, updatePricing, finalizePricing } from '@/components/pricing/actions';
import type { PricingData } from '@/components/pricing';
import { ServerErrorPage } from '@/components/common/ServerErrorPage';
import { GenericPageSkeleton } from '@/components/ui/skeleton';

interface PricingDetailPageProps {
  params: Promise<{
    id: string;
  }>;
}

export default function PricingDetailPage({ params }: PricingDetailPageProps) {
  const { id } = use(params);
  const router = useRouter();
  const searchParams = useSearchParams();
  const mode = searchParams.get('mode') || 'view';
  const isEditMode = mode === 'edit';
  const [data, setData] = useState<PricingData | null>(null);
  const [isLoading, setIsLoading] = useState(true);
  const [error, setError] = useState<string | null>(null);

  useEffect(() => {
    getPricingById(id)
      .then(result => {
        if (result) {
          setData(result);
        } else {
          setError('단가 정보를 찾을 수 없습니다.');
        }
      })
      .catch(() => {
        setError('단가 정보를 불러오는 중 오류가 발생했습니다.');
      })
      .finally(() => setIsLoading(false));
  }, [id]);

  // 단가 수정 핸들러
  const handleSave = async (formData: PricingData, isRevision?: boolean, revisionReason?: string) => {
    const result = await updatePricing(id, formData, revisionReason);
    if (!result.success) {
      throw new Error(result.error || '단가 수정에 실패했습니다.');
    }
  };

  // 단가 확정 핸들러
  const handleFinalize = async (priceId: string) => {
    const result = await finalizePricing(priceId);
    if (!result.success) {
      throw new Error(result.error || '단가 확정에 실패했습니다.');
    }
  };

  if (isLoading) return <GenericPageSkeleton />;

  if (error || !data) {
    return (
      <ServerErrorPage
        title="단가 정보를 불러올 수 없습니다"
        message={error || '단가 정보를 찾을 수 없습니다.'}
        showBackButton={true}
        showHomeButton={true}
      />
    );
  }

  return (
    <PricingFormClient
      mode={isEditMode ? 'edit' : 'view'}
      initialData={data}
      onSave={handleSave}
      onFinalize={handleFinalize}
    />
  );
}
