// ============================================================
// 화면별 기능 정의 템플릿 (상세 UI 인터렉션 & 상태값)
// 각 화면 ID별로 UI 요소, 동작, 상태 변화를 상세히 정의
// 자동 번호 뱃지 표시용 위치 정보 포함
// ============================================================

const screenFeatureTemplates = {
  // ========================================
  // 판매관리 - 견적관리
  // ========================================
  'quote-list': {
    screenName: '견적 목록',
    menuPath: '판매관리 > 견적관리',
    screenType: 'list',
    description: '견적 목록 조회 및 관리 화면. 견적 검색, 필터링, 등록, 수주전환 기능 제공',
    sections: [
      {
        title: '헤더 영역',
        description: '페이지 타이틀 및 등록 버튼',
        layout: 'flex-between',
        elements: [
          {
            id: 'page-title',
            type: 'text',
            label: '페이지 타이틀',
            description: '현재 화면명 표시 (견적 목록)',
            position: { selector: 'h1', area: 'header' }
          },
          {
            id: 'btn-register',
            type: 'button',
            label: '견적 등록',
            description: '새 견적서 작성 화면으로 이동',
            action: {
              trigger: '버튼 클릭',
              behavior: 'view를 quote-register로 변경',
              result: '견적 등록 폼 화면 표시',
              navigation: 'quote-register'
            },
            states: [
              { state: '기본', condition: '항상', display: '검정 배경 + 흰색 텍스트, Plus 아이콘' }
            ],
            position: { selector: '.btn-primary', area: 'header-right' }
          }
        ]
      },
      {
        title: '리포트 카드',
        description: '견적 현황 요약 통계 (4개 카드)',
        layout: 'grid-4',
        elements: [
          {
            id: 'card-total',
            type: 'card',
            label: '총 견적',
            description: '전체 견적 건수',
            dataSource: 'quotes.length',
            states: [
              { state: '로딩', condition: 'API 호출 중', display: '스켈레톤 UI' },
              { state: '표시', condition: '데이터 로드 완료', display: '숫자 + "건"' }
            ],
            position: { selector: '.report-card:nth-child(1)', area: 'stats' }
          },
          {
            id: 'card-draft',
            type: 'card',
            label: '작성중',
            description: '작성중 상태의 견적 건수',
            dataSource: 'quotes.filter(q => q.status === "작성중").length',
            states: [
              { state: '0건', condition: '작성중 없음', display: '0건 (회색 텍스트)' },
              { state: 'N건', condition: '작성중 있음', display: 'N건 (파란색 텍스트)' }
            ],
            position: { selector: '.report-card:nth-child(2)', area: 'stats' }
          },
          {
            id: 'card-sent',
            type: 'card',
            label: '발송완료',
            description: '거래처에 발송된 견적 건수',
            dataSource: 'quotes.filter(q => q.status === "발송완료").length',
            position: { selector: '.report-card:nth-child(3)', area: 'stats' }
          },
          {
            id: 'card-confirmed',
            type: 'card',
            label: '최종확정',
            description: '거래처가 확정한 견적 건수',
            dataSource: 'quotes.filter(q => q.status === "최종확정").length',
            position: { selector: '.report-card:nth-child(4)', area: 'stats' }
          }
        ]
      },
      {
        title: '검색/필터 영역',
        description: '견적 검색 및 필터링',
        layout: 'flex-row',
        elements: [
          {
            id: 'search-input',
            type: 'input',
            label: '검색',
            placeholder: '견적번호, 거래처, 현장명 검색...',
            description: '키워드로 견적 목록 필터링',
            action: {
              trigger: '텍스트 입력 후 Enter 또는 검색 아이콘 클릭',
              behavior: '입력값으로 quotes 배열 필터링 (quoteNo, customerName, siteName 대상)',
              result: '검색 조건에 맞는 견적만 테이블에 표시',
              api: 'GET /api/quotes?keyword={검색어}'
            },
            states: [
              { state: '빈 상태', condition: '입력값 없음', display: 'placeholder 텍스트 표시' },
              { state: '입력중', condition: '포커스 + 입력', display: '입력 텍스트, 클리어 버튼 표시' },
              { state: '검색완료', condition: '검색 실행 후', display: '검색 결과 건수 표시' },
              { state: '결과없음', condition: '검색 결과 0건', display: '테이블에 "검색 결과가 없습니다" 표시' }
            ],
            validation: '최소 2자 이상 입력 필요',
            position: { selector: '.search-input', area: 'filter' }
          },
          {
            id: 'filter-status',
            type: 'select',
            label: '상태 필터',
            options: ['전체', '작성중', '발송완료', '최종확정', '수주전환'],
            description: '견적 상태별 필터링',
            action: {
              trigger: '드롭다운 값 선택',
              behavior: '선택한 상태의 견적만 필터링',
              result: '해당 상태의 견적만 테이블에 표시'
            },
            states: [
              { state: '전체', condition: '기본값', display: '"전체" 선택됨' },
              { state: '필터적용', condition: '다른 값 선택', display: '선택된 상태명 표시, 필터 아이콘 활성' }
            ],
            position: { selector: '.filter-status', area: 'filter' }
          },
          {
            id: 'filter-date',
            type: 'date',
            label: '기간 필터',
            description: '견적일 기준 기간 필터링',
            action: {
              trigger: '시작일/종료일 선택',
              behavior: '선택 기간 내 견적만 필터링',
              result: '해당 기간의 견적만 테이블에 표시'
            },
            states: [
              { state: '기본', condition: '미선택', display: '최근 1개월 기본 설정' },
              { state: '사용자지정', condition: '날짜 변경', display: '선택한 날짜 범위 표시' }
            ],
            position: { selector: '.filter-date', area: 'filter' }
          }
        ]
      },
      {
        title: '견적 목록 테이블',
        description: '견적 목록 표시 및 행 선택/클릭 동작',
        layout: 'table',
        elements: [
          {
            id: 'checkbox-all',
            type: 'checkbox',
            label: '전체선택 체크박스',
            description: '모든 행 일괄 선택/해제',
            action: {
              trigger: '체크박스 클릭',
              behavior: 'toggleSelectAll() 호출',
              result: '모든 행 선택 또는 모든 행 해제'
            },
            states: [
              { state: '미선택', condition: '선택된 행 없음', display: '빈 체크박스' },
              { state: '부분선택', condition: '일부 행 선택', display: '인디케이터(-) 표시' },
              { state: '전체선택', condition: '모든 행 선택', display: '체크 표시' }
            ],
            position: { selector: 'thead th:first-child input', area: 'table-header' }
          },
          {
            id: 'table-row',
            type: 'table',
            label: '견적 목록 행',
            description: '개별 견적 정보 표시 행',
            columns: [
              { name: '선택', width: '40px', description: '행 선택 체크박스' },
              { name: '견적번호', width: '120px', description: '자동 채번된 견적번호 (QT-YYMMDD-##)' },
              { name: '견적일', width: '100px', description: '견적서 작성일' },
              { name: '거래처', width: '150px', description: '발주처 업체명' },
              { name: '현장명', width: '200px', description: '설치/납품 현장명' },
              { name: '담당자', width: '80px', description: '거래처 담당자명' },
              { name: '총금액', width: '120px', description: '견적 총액 (부가세 포함)' },
              { name: '상태', width: '80px', description: '견적 진행 상태 뱃지' },
              { name: '작업', width: '100px', description: '수정/삭제 버튼 (선택 시 표시)' }
            ],
            action: {
              trigger: '행 클릭 (체크박스, 작업 버튼 제외)',
              behavior: 'setSelectedItem(quote), view를 quote-detail로 변경',
              result: '견적 상세 화면으로 이동'
            },
            states: [
              { state: '로딩', condition: 'API 호출 중', display: '테이블 스켈레톤 UI (5행)' },
              { state: '데이터있음', condition: '견적 1건 이상', display: '견적 목록 표시 (최신순 정렬)' },
              { state: '데이터없음', condition: '견적 0건', display: '"등록된 견적이 없습니다" 메시지 + 등록 유도' },
              { state: '행호버', condition: '마우스 오버', display: 'bg-gray-50 배경색' },
              { state: '행선택', condition: '체크박스 선택', display: 'bg-blue-50 배경색, 작업 버튼 표시' }
            ],
            position: { selector: 'tbody', area: 'table-body' }
          },
          {
            id: 'btn-row-edit',
            type: 'button',
            label: '수정 버튼',
            description: '선택된 행의 견적 수정',
            condition: 'hasSelection && isSelected(row.id)',
            action: {
              trigger: '버튼 클릭',
              behavior: 'view를 quote-edit로 변경, selectedItem 설정',
              result: '견적 수정 화면으로 이동'
            },
            states: [
              { state: '숨김', condition: '해당 행 미선택', display: '버튼 숨김' },
              { state: '표시', condition: '해당 행 선택됨', display: '파란색 Edit 아이콘 버튼' }
            ],
            position: { selector: '.btn-edit', area: 'table-actions' }
          },
          {
            id: 'btn-row-delete',
            type: 'button',
            label: '삭제 버튼',
            description: '선택된 행의 견적 삭제',
            condition: 'hasSelection && isSelected(row.id)',
            action: {
              trigger: '버튼 클릭',
              behavior: '확인 다이얼로그 표시 → 확인 시 quotes에서 해당 항목 제거',
              result: '견적 삭제, 목록 새로고침'
            },
            states: [
              { state: '숨김', condition: '해당 행 미선택', display: '버튼 숨김' },
              { state: '표시', condition: '해당 행 선택됨', display: '빨간색 Trash2 아이콘 버튼' }
            ],
            position: { selector: '.btn-delete', area: 'table-actions' }
          },
          {
            id: 'status-badge',
            type: 'display',
            label: '상태 뱃지',
            description: '견적 상태를 색상 뱃지로 표시',
            states: [
              { state: '작성중', condition: 'status === "작성중"', display: '회색 뱃지' },
              { state: '발송완료', condition: 'status === "발송완료"', display: '파란색 뱃지' },
              { state: '최종확정', condition: 'status === "최종확정"', display: '녹색 뱃지' },
              { state: '수주전환', condition: 'status === "수주전환"', display: '보라색 뱃지' }
            ],
            position: { selector: '.status-badge', area: 'table-cell' }
          }
        ]
      },
      {
        title: '페이지네이션',
        description: '목록 페이지 이동',
        elements: [
          {
            id: 'pagination',
            type: 'button',
            label: '페이지네이션',
            description: '페이지 이동 버튼',
            action: {
              trigger: '페이지 번호 또는 이전/다음 버튼 클릭',
              behavior: 'currentPage 상태 변경',
              result: '해당 페이지의 데이터 표시'
            },
            states: [
              { state: '첫페이지', condition: 'currentPage === 1', display: '이전/처음 버튼 비활성' },
              { state: '중간페이지', condition: '1 < currentPage < totalPages', display: '모든 버튼 활성' },
              { state: '마지막페이지', condition: 'currentPage === totalPages', display: '다음/끝 버튼 비활성' }
            ],
            position: { selector: '.pagination', area: 'footer' }
          }
        ]
      }
    ]
  },

  'quote-register': {
    screenName: '견적 등록',
    menuPath: '판매관리 > 견적관리 > 등록',
    screenType: 'form',
    description: '새 견적서 작성 화면. 거래처/현장 선택, 품목 입력, 견적 금액 산출',
    sections: [
      {
        title: '헤더 영역',
        description: '타이틀 및 저장/취소 버튼',
        layout: 'header-actions',
        elements: [
          {
            id: 'page-title',
            type: 'text',
            label: '페이지 타이틀',
            description: '견적 등록 타이틀',
            position: { selector: 'h1', area: 'header' }
          },
          {
            id: 'btn-cancel',
            type: 'button',
            label: '취소',
            description: '입력 내용 취소 후 목록으로 이동',
            action: {
              trigger: '버튼 클릭',
              behavior: '확인 다이얼로그 → 확인 시 quote-list로 이동',
              result: '견적 목록 화면으로 이동'
            },
            states: [
              { state: '기본', condition: '항상', display: 'outline 스타일 버튼' }
            ],
            position: { selector: '.btn-cancel', area: 'header-right' }
          },
          {
            id: 'btn-save',
            type: 'button',
            label: '저장',
            description: '견적 데이터 저장',
            action: {
              trigger: '버튼 클릭',
              behavior: '필수 필드 검증 → 통과 시 quotes에 추가, quote-detail로 이동',
              result: '견적 저장 완료, 상세 화면으로 이동',
              validation: '거래처, 현장명, 품목 1개 이상 필수'
            },
            states: [
              { state: '비활성', condition: '필수 필드 미입력', display: '회색 버튼, 클릭 불가' },
              { state: '활성', condition: '필수 필드 입력됨', display: '검정 배경 Primary 버튼' },
              { state: '저장중', condition: 'API 호출 중', display: '로딩 스피너' }
            ],
            position: { selector: '.btn-save', area: 'header-right' }
          }
        ]
      },
      {
        title: '기본정보 섹션',
        description: '견적 기본 정보 입력',
        layout: 'form-grid-3',
        elements: [
          {
            id: 'input-quote-no',
            type: 'input',
            label: '견적번호',
            required: false,
            readOnly: true,
            description: '자동 채번 (QT-YYMMDD-##)',
            states: [
              { state: '자동생성', condition: '저장 전', display: '(자동생성) 표시' },
              { state: '확정', condition: '저장 후', display: '채번된 번호 표시' }
            ],
            position: { selector: '#quoteNo', area: 'form-basic' }
          },
          {
            id: 'input-customer',
            type: 'select',
            label: '거래처',
            required: true,
            description: '발주처 거래처 선택',
            action: {
              trigger: '선택 버튼 클릭',
              behavior: '거래처 선택 모달 표시',
              result: '선택한 거래처 정보 자동 입력'
            },
            states: [
              { state: '미선택', condition: '거래처 없음', display: '"거래처 선택" placeholder, 빨간 테두리(blur 시)' },
              { state: '선택됨', condition: '거래처 있음', display: '거래처명 표시' }
            ],
            validation: '필수 입력',
            position: { selector: '#customer', area: 'form-basic' }
          },
          {
            id: 'input-site',
            type: 'input',
            label: '현장명',
            required: true,
            description: '납품/설치 현장명',
            states: [
              { state: '빈 상태', condition: '입력값 없음', display: 'placeholder 표시, 빨간 테두리(blur 시)' },
              { state: '입력됨', condition: '입력값 있음', display: '입력 텍스트 표시' }
            ],
            validation: '필수 입력',
            position: { selector: '#siteName', area: 'form-basic' }
          },
          {
            id: 'input-manager',
            type: 'input',
            label: '담당자',
            required: false,
            description: '거래처 담당자명',
            position: { selector: '#manager', area: 'form-basic' }
          },
          {
            id: 'input-contact',
            type: 'input',
            label: '연락처',
            required: false,
            description: '담당자 연락처',
            format: '000-0000-0000',
            position: { selector: '#contact', area: 'form-basic' }
          },
          {
            id: 'input-due-date',
            type: 'date',
            label: '납기요청일',
            required: true,
            description: '고객 요청 납기일',
            states: [
              { state: '미선택', condition: '날짜 없음', display: '날짜 선택 버튼' },
              { state: '선택됨', condition: '날짜 있음', display: 'YYYY-MM-DD 형식 표시' },
              { state: '경고', condition: '오늘보다 이전', display: '경고 메시지' }
            ],
            position: { selector: '#dueDate', area: 'form-basic' }
          }
        ]
      },
      {
        title: '품목 입력 섹션',
        description: '견적 품목 리스트 입력',
        layout: 'table-editable',
        elements: [
          {
            id: 'btn-add-item',
            type: 'button',
            label: '품목 추가',
            description: '새 품목 행 추가',
            action: {
              trigger: '버튼 클릭',
              behavior: 'items 배열에 빈 행 추가',
              result: '테이블 하단에 새 입력 행 추가'
            },
            states: [
              { state: '기본', condition: '항상', display: 'Plus 아이콘 + "품목 추가" 텍스트' }
            ],
            position: { selector: '.btn-add-item', area: 'items-header' }
          },
          {
            id: 'items-table',
            type: 'table',
            label: '품목 테이블',
            description: '견적 품목 입력 테이블',
            columns: [
              { name: 'No', width: '40px', description: '순번' },
              { name: '품목코드', width: '100px', description: '품목 선택 또는 직접 입력' },
              { name: '품명', width: '200px', description: '품목명' },
              { name: '규격', width: '120px', description: '폭×높이 (mm)' },
              { name: '수량', width: '80px', description: '견적 수량' },
              { name: '단가', width: '100px', description: '단가 (원)' },
              { name: '금액', width: '120px', description: '수량×단가 자동 계산' },
              { name: '삭제', width: '50px', description: '행 삭제 버튼' }
            ],
            action: {
              trigger: '셀 클릭',
              behavior: '해당 셀 편집 모드 활성화',
              result: '인풋 필드로 변경, 입력 가능'
            },
            states: [
              { state: '빈 상태', condition: '품목 0건', display: '"품목을 추가해주세요" 메시지' },
              { state: '입력중', condition: '품목 1건 이상', display: '입력된 품목 행 표시' },
              { state: '계산완료', condition: '수량, 단가 입력', display: '금액 자동 계산 표시' }
            ],
            position: { selector: '.items-table', area: 'items-body' }
          },
          {
            id: 'summary-total',
            type: 'display',
            label: '합계 금액',
            description: '견적 총액 표시',
            dataSource: 'items.reduce((sum, item) => sum + item.amount, 0)',
            format: '원화 (₩#,###)',
            states: [
              { state: '계산전', condition: '품목 없음', display: '₩0' },
              { state: '계산됨', condition: '품목 있음', display: '합계 금액 표시 (부가세 별도/포함 토글)' }
            ],
            position: { selector: '.summary-total', area: 'items-footer' }
          }
        ]
      },
      {
        title: '추가정보 섹션',
        description: '비고 및 첨부파일',
        elements: [
          {
            id: 'input-note',
            type: 'textarea',
            label: '비고',
            required: false,
            description: '견적 관련 특이사항',
            position: { selector: '#note', area: 'form-extra' }
          },
          {
            id: 'input-attachment',
            type: 'button',
            label: '파일 첨부',
            description: '관련 문서 첨부',
            action: {
              trigger: '버튼 클릭',
              behavior: '파일 선택 다이얼로그 표시',
              result: '선택한 파일 목록에 추가'
            },
            states: [
              { state: '없음', condition: '첨부파일 0건', display: '"파일 첨부" 버튼' },
              { state: '있음', condition: '첨부파일 있음', display: '파일명 목록 + 삭제 버튼' }
            ],
            position: { selector: '.btn-attachment', area: 'form-extra' }
          }
        ]
      }
    ]
  },

  'quote-detail': {
    screenName: '견적 상세',
    menuPath: '판매관리 > 견적관리 > 상세',
    screenType: 'detail',
    description: '견적 상세 정보 조회 및 문서 출력, 수주 전환 기능',
    sections: [
      {
        title: '헤더 영역',
        description: '타이틀, 상태 뱃지, 액션 버튼',
        layout: 'header-detail',
        elements: [
          {
            id: 'page-title',
            type: 'text',
            label: '페이지 타이틀',
            description: '견적 상세 + 견적번호',
            position: { selector: 'h1', area: 'header' }
          },
          {
            id: 'status-badge',
            type: 'display',
            label: '상태 뱃지',
            description: '현재 견적 상태',
            states: [
              { state: '작성중', condition: 'status === "작성중"', display: '회색 뱃지' },
              { state: '발송완료', condition: 'status === "발송완료"', display: '파란색 뱃지' },
              { state: '최종확정', condition: 'status === "최종확정"', display: '녹색 뱃지' },
              { state: '수주전환', condition: 'status === "수주전환"', display: '보라색 뱃지' }
            ],
            position: { selector: '.status-badge', area: 'header' }
          },
          {
            id: 'btn-print-quote',
            type: 'button',
            label: '견적서 출력',
            description: '견적서 PDF 출력/다운로드',
            action: {
              trigger: '버튼 클릭',
              behavior: '견적서 미리보기 모달 표시',
              result: 'PDF 미리보기 및 출력/다운로드 옵션'
            },
            position: { selector: '.btn-print-quote', area: 'header-actions-left' }
          },
          {
            id: 'btn-print-estimate',
            type: 'button',
            label: '산출내역서',
            description: '산출내역서 PDF 출력',
            action: {
              trigger: '버튼 클릭',
              behavior: '산출내역서 미리보기 모달 표시',
              result: 'PDF 미리보기 및 출력/다운로드'
            },
            position: { selector: '.btn-print-estimate', area: 'header-actions-left' }
          },
          {
            id: 'btn-list',
            type: 'button',
            label: '목록',
            description: '견적 목록으로 이동',
            action: {
              trigger: '버튼 클릭',
              behavior: 'view를 quote-list로 변경',
              result: '견적 목록 화면으로 이동'
            },
            position: { selector: '.btn-list', area: 'header-actions-right' }
          },
          {
            id: 'btn-edit',
            type: 'button',
            label: '수정',
            description: '견적 수정 화면으로 이동',
            condition: 'status !== "수주전환"',
            action: {
              trigger: '버튼 클릭',
              behavior: 'view를 quote-edit로 변경',
              result: '견적 수정 화면으로 이동'
            },
            states: [
              { state: '활성', condition: '수주전환 전', display: '파란색 버튼' },
              { state: '비활성', condition: '수주전환됨', display: '회색 버튼 또는 숨김' }
            ],
            position: { selector: '.btn-edit', area: 'header-actions-right' }
          },
          {
            id: 'btn-confirm',
            type: 'button',
            label: '최종확정',
            description: '견적을 최종 확정 상태로 변경',
            condition: 'status === "발송완료"',
            action: {
              trigger: '버튼 클릭',
              behavior: '확인 다이얼로그 → 상태를 "최종확정"으로 변경',
              result: '상태 변경, 수주전환 버튼 활성화'
            },
            states: [
              { state: '숨김', condition: '발송완료 아님', display: '버튼 숨김' },
              { state: '표시', condition: '발송완료 상태', display: '녹색 버튼' }
            ],
            position: { selector: '.btn-confirm', area: 'header-actions-right' }
          },
          {
            id: 'btn-convert-order',
            type: 'button',
            label: '수주전환',
            description: '견적을 수주로 전환',
            condition: 'status === "최종확정"',
            action: {
              trigger: '버튼 클릭',
              behavior: '수주전환 확인 다이얼로그 → 수주 데이터 생성, 견적 상태 변경',
              result: '수주 생성 완료, 수주 상세 화면으로 이동 옵션'
            },
            states: [
              { state: '숨김', condition: '최종확정 아님', display: '버튼 숨김' },
              { state: '표시', condition: '최종확정 상태', display: '보라색 버튼' }
            ],
            position: { selector: '.btn-convert-order', area: 'header-actions-right' }
          }
        ]
      },
      {
        title: '기본정보 섹션',
        description: '견적 기본 정보 표시',
        layout: 'detail-grid',
        elements: [
          {
            id: 'info-quote-no',
            type: 'display',
            label: '견적번호',
            dataSource: 'quote.quoteNo',
            position: { area: 'detail-basic' }
          },
          {
            id: 'info-quote-date',
            type: 'display',
            label: '견적일',
            dataSource: 'quote.quoteDate',
            position: { area: 'detail-basic' }
          },
          {
            id: 'info-customer',
            type: 'display',
            label: '거래처',
            dataSource: 'quote.customerName',
            position: { area: 'detail-basic' }
          },
          {
            id: 'info-site',
            type: 'display',
            label: '현장명',
            dataSource: 'quote.siteName',
            position: { area: 'detail-basic' }
          },
          {
            id: 'info-manager',
            type: 'display',
            label: '담당자',
            dataSource: 'quote.manager',
            position: { area: 'detail-basic' }
          },
          {
            id: 'info-due-date',
            type: 'display',
            label: '납기요청일',
            dataSource: 'quote.dueDate',
            position: { area: 'detail-basic' }
          }
        ]
      },
      {
        title: '품목 목록 섹션',
        description: '견적 품목 리스트',
        layout: 'table-readonly',
        elements: [
          {
            id: 'items-table',
            type: 'table',
            label: '품목 테이블',
            description: '견적 품목 정보 (읽기 전용)',
            columns: [
              { name: 'No', description: '순번' },
              { name: '품목코드', description: '품목 코드' },
              { name: '품명', description: '품목명' },
              { name: '규격', description: '규격/사이즈' },
              { name: '수량', description: '수량' },
              { name: '단가', description: '단가' },
              { name: '금액', description: '금액' }
            ],
            position: { area: 'detail-items' }
          },
          {
            id: 'total-amount',
            type: 'display',
            label: '합계 금액',
            description: '견적 총액',
            dataSource: 'quote.totalAmount',
            format: '원화',
            position: { area: 'detail-items-footer' }
          }
        ]
      },
      {
        title: '변경이력 섹션',
        description: '견적 변경 이력',
        elements: [
          {
            id: 'history-list',
            type: 'table',
            label: '변경이력',
            description: '견적 상태 변경 이력',
            columns: [
              { name: '변경일시', description: '변경 발생 시간' },
              { name: '변경내용', description: '변경 사항' },
              { name: '변경자', description: '변경 수행자' }
            ],
            position: { area: 'detail-history' }
          }
        ]
      }
    ]
  },

  // ========================================
  // 판매관리 - 수주관리
  // ========================================
  'order-list': {
    screenName: '수주 목록',
    menuPath: '판매관리 > 수주관리',
    screenType: 'list',
    description: '수주 목록 조회 및 관리. 수주 검색, 상태별 필터, 작업지시 생성',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          {
            id: 'page-title',
            type: 'text',
            label: '페이지 타이틀',
            description: '수주 목록',
            position: { area: 'header' }
          },
          {
            id: 'btn-register',
            type: 'button',
            label: '수주 등록',
            description: '새 수주 등록 화면으로 이동',
            action: {
              trigger: '버튼 클릭',
              behavior: 'view를 order-register로 변경',
              result: '수주 등록 화면 표시'
            },
            states: [
              { state: '기본', condition: '항상', display: '검정 배경 Primary 버튼' }
            ],
            position: { area: 'header-right' }
          }
        ]
      },
      {
        title: '리포트 카드',
        layout: 'grid-4',
        elements: [
          {
            id: 'card-total',
            type: 'card',
            label: '총 수주',
            description: '전체 수주 건수',
            position: { area: 'stats' }
          },
          {
            id: 'card-waiting',
            type: 'card',
            label: '생산대기',
            description: '작업지시 미생성 수주',
            states: [
              { state: '0건', condition: '대기 없음', display: '0건' },
              { state: 'N건', condition: '대기 있음', display: 'N건 (주황색)' }
            ],
            position: { area: 'stats' }
          },
          {
            id: 'card-progress',
            type: 'card',
            label: '생산중',
            description: '작업 진행 중인 수주',
            position: { area: 'stats' }
          },
          {
            id: 'card-completed',
            type: 'card',
            label: '출하완료',
            description: '출하 완료된 수주',
            position: { area: 'stats' }
          }
        ]
      },
      {
        title: '검색/필터 영역',
        elements: [
          {
            id: 'search-input',
            type: 'input',
            label: '검색',
            placeholder: '수주번호, 거래처, 현장명 검색...',
            action: {
              trigger: '텍스트 입력 후 Enter',
              behavior: '검색어로 목록 필터링',
              result: '매칭되는 수주만 표시'
            },
            states: [
              { state: '빈 상태', condition: '입력값 없음', display: 'placeholder 표시' },
              { state: '검색중', condition: '검색 실행', display: '로딩 아이콘' },
              { state: '결과표시', condition: '검색 완료', display: '결과 건수' }
            ],
            position: { area: 'filter' }
          },
          {
            id: 'view-toggle',
            type: 'button',
            label: '보기 방식',
            description: '테이블/카드 뷰 전환',
            action: {
              trigger: '토글 버튼 클릭',
              behavior: 'viewMode 상태 변경 (table ↔ card)',
              result: '선택한 뷰 형태로 목록 표시'
            },
            states: [
              { state: '테이블', condition: 'viewMode === "table"', display: '테이블 아이콘 활성' },
              { state: '카드', condition: 'viewMode === "card"', display: '카드 아이콘 활성' }
            ],
            position: { area: 'filter' }
          }
        ]
      },
      {
        title: '수주 목록 테이블',
        elements: [
          {
            id: 'table-orders',
            type: 'table',
            label: '수주 목록',
            columns: [
              { name: '선택', description: '체크박스' },
              { name: '수주번호', description: '자동 채번 (SO-YYMMDD-##)' },
              { name: '수주일', description: '수주 등록일' },
              { name: '거래처', description: '발주처' },
              { name: '현장명', description: '납품 현장' },
              { name: '납기일', description: '납기요청일' },
              { name: '총금액', description: '수주 총액' },
              { name: '생산상태', description: '작업지시 진행 상태' },
              { name: '출하상태', description: '출하 진행 상태' },
              { name: '작업', description: '수정/삭제 버튼' }
            ],
            action: {
              trigger: '행 클릭',
              behavior: 'selectedItem 설정, view를 order-detail로 변경',
              result: '수주 상세 화면으로 이동'
            },
            states: [
              { state: '로딩', condition: 'API 호출 중', display: '스켈레톤 UI' },
              { state: '데이터있음', condition: '수주 1건 이상', display: '수주 목록 (최신순)' },
              { state: '데이터없음', condition: '수주 0건', display: '"등록된 수주가 없습니다"' }
            ],
            position: { area: 'table' }
          }
        ]
      }
    ]
  },

  'order-detail': {
    screenName: '수주 상세',
    menuPath: '판매관리 > 수주관리 > 상세',
    screenType: 'detail',
    description: '수주 상세 정보, 생산지시 생성, 분할 관리, 출하 현황',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          {
            id: 'page-title',
            type: 'text',
            label: '페이지 타이틀',
            description: '수주 상세 + 수주번호',
            position: { area: 'header' }
          },
          {
            id: 'status-badge',
            type: 'display',
            label: '상태 뱃지',
            states: [
              { state: '수주확정', condition: 'status === "수주확정"', display: '파란색 뱃지' },
              { state: '생산중', condition: 'status === "생산중"', display: '주황색 뱃지' },
              { state: '출하대기', condition: 'status === "출하대기"', display: '노란색 뱃지' },
              { state: '출하완료', condition: 'status === "출하완료"', display: '녹색 뱃지' }
            ],
            position: { area: 'header' }
          },
          {
            id: 'btn-contract',
            type: 'button',
            label: '계약서',
            description: '계약서 문서 출력',
            action: {
              trigger: '버튼 클릭',
              behavior: '계약서 미리보기 모달 표시',
              result: 'PDF 미리보기 및 출력'
            },
            position: { area: 'header-doc-left' }
          },
          {
            id: 'btn-statement',
            type: 'button',
            label: '거래명세서',
            description: '거래명세서 출력',
            action: {
              trigger: '버튼 클릭',
              behavior: '거래명세서 미리보기 모달 표시',
              result: 'PDF 미리보기 및 출력'
            },
            position: { area: 'header-doc-left' }
          },
          {
            id: 'btn-purchase-order',
            type: 'button',
            label: '발주서',
            description: '발주서 출력',
            position: { area: 'header-doc-left' }
          },
          {
            id: 'btn-list',
            type: 'button',
            label: '목록',
            description: '수주 목록으로 이동',
            action: {
              trigger: '버튼 클릭',
              behavior: 'view를 order-list로 변경',
              result: '수주 목록 화면으로 이동'
            },
            position: { area: 'header-actions-right' }
          },
          {
            id: 'btn-edit',
            type: 'button',
            label: '수정',
            description: '수주 수정 화면으로 이동',
            condition: 'status !== "출하완료"',
            action: {
              trigger: '버튼 클릭',
              behavior: 'view를 order-edit로 변경',
              result: '수주 수정 화면으로 이동'
            },
            states: [
              { state: '활성', condition: '출하완료 전', display: '파란색 버튼' },
              { state: '비활성', condition: '출하완료', display: '회색 버튼' }
            ],
            position: { area: 'header-actions-right' }
          },
          {
            id: 'btn-production-order',
            type: 'button',
            label: '생산지시 생성',
            description: '수주를 기반으로 생산지시 생성',
            condition: '!hasProductionOrder && status === "수주확정"',
            action: {
              trigger: '버튼 클릭',
              behavior: '생산지시 생성 확인 모달 → 공정별 작업지시 자동 생성',
              result: '생산지시 생성 완료, 생산관리로 이동 옵션'
            },
            states: [
              { state: '활성', condition: '생산지시 미생성', display: '녹색 버튼' },
              { state: '비활성', condition: '생산지시 존재', display: '숨김 또는 "생산지시 보기" 버튼으로 변경' }
            ],
            position: { area: 'header-actions-right' }
          }
        ]
      },
      {
        title: '기본정보 섹션',
        layout: 'detail-grid-3',
        elements: [
          { id: 'info-order-no', type: 'display', label: '수주번호', dataSource: 'order.orderNo' },
          { id: 'info-order-date', type: 'display', label: '수주일', dataSource: 'order.orderDate' },
          { id: 'info-customer', type: 'display', label: '거래처', dataSource: 'order.customerName' },
          { id: 'info-site', type: 'display', label: '현장명', dataSource: 'order.siteName' },
          { id: 'info-due-date', type: 'display', label: '납기일', dataSource: 'order.dueDate' },
          { id: 'info-total', type: 'display', label: '총금액', dataSource: 'order.totalAmount', format: '원화' }
        ]
      },
      {
        title: '품목 목록 섹션',
        elements: [
          {
            id: 'items-table',
            type: 'table',
            label: '수주 품목',
            columns: [
              { name: 'No', description: '순번' },
              { name: '품목코드', description: '품목 코드' },
              { name: '품명', description: '품목명' },
              { name: '층/개소', description: '설치 위치' },
              { name: '규격', description: 'W×H' },
              { name: '수량', description: '수량' },
              { name: '단가', description: '단가' },
              { name: '금액', description: '금액' }
            ],
            position: { area: 'detail-items' }
          }
        ]
      },
      {
        title: '분할 관리 섹션',
        description: '수주 분할 출하 관리',
        condition: 'order.splits?.length > 0',
        elements: [
          {
            id: 'btn-add-split',
            type: 'button',
            label: '분할 생성',
            description: '새 분할 추가',
            action: {
              trigger: '버튼 클릭',
              behavior: '분할 생성 모달 표시, 품목 선택 및 출고예정일 입력',
              result: '새 분할 데이터 추가'
            },
            position: { area: 'split-header' }
          },
          {
            id: 'splits-table',
            type: 'table',
            label: '분할 목록',
            columns: [
              { name: '분할번호', description: '분할 순번' },
              { name: '출고예정일', description: '분할 출고 예정일' },
              { name: '품목수', description: '해당 분할의 품목 수' },
              { name: '생산상태', description: '분할별 생산 진행 상태' },
              { name: '출하상태', description: '분할별 출하 상태' },
              { name: '작업', description: '생산지시/출하 버튼' }
            ],
            action: {
              trigger: '분할 행의 "생산지시" 버튼 클릭',
              behavior: '해당 분할에 대한 생산지시 생성',
              result: '분할별 작업지시 생성'
            },
            position: { area: 'split-body' }
          }
        ]
      },
      {
        title: '생산/출하 현황',
        elements: [
          {
            id: 'production-progress',
            type: 'display',
            label: '생산 진행률',
            description: '전체 생산 진행 상황',
            states: [
              { state: '대기', condition: '생산지시 없음', display: '0% (회색 바)' },
              { state: '진행중', condition: '0 < progress < 100', display: 'N% (파란색 바)' },
              { state: '완료', condition: 'progress === 100', display: '100% (녹색 바)' }
            ],
            position: { area: 'status-overview' }
          },
          {
            id: 'shipment-progress',
            type: 'display',
            label: '출하 진행률',
            description: '전체 출하 진행 상황',
            states: [
              { state: '대기', condition: '출하 없음', display: '0%' },
              { state: '부분출하', condition: '부분 출하', display: 'N%' },
              { state: '완료', condition: '전량 출하', display: '100%' }
            ],
            position: { area: 'status-overview' }
          }
        ]
      }
    ]
  },

  // ========================================
  // 판매관리 - 출하관리
  // ========================================
  'shipment-list': {
    screenName: '출하 목록',
    menuPath: '판매관리 > 출하관리',
    screenType: 'list',
    description: '출하 목록 조회 및 출하 등록, 출하 확정 관리',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          { id: 'page-title', type: 'text', label: '페이지 타이틀' },
          {
            id: 'btn-register',
            type: 'button',
            label: '출하 등록',
            action: {
              trigger: '버튼 클릭',
              behavior: 'view를 shipment-register로 변경',
              result: '출하 등록 화면 표시'
            },
            position: { area: 'header-right' }
          }
        ]
      },
      {
        title: '리포트 카드',
        layout: 'grid-4',
        elements: [
          { id: 'card-total', type: 'card', label: '총 출하' },
          { id: 'card-waiting', type: 'card', label: '출하대기' },
          { id: 'card-confirmed', type: 'card', label: '출하확정' },
          { id: 'card-delivered', type: 'card', label: '배송완료' }
        ]
      },
      {
        title: '검색 영역',
        elements: [
          {
            id: 'search-input',
            type: 'input',
            label: '검색',
            placeholder: '출하번호, 수주번호, 거래처 검색...',
            position: { area: 'filter' }
          }
        ]
      },
      {
        title: '출하 목록 테이블',
        elements: [
          {
            id: 'table-shipments',
            type: 'table',
            label: '출하 목록',
            columns: [
              { name: '선택' },
              { name: '출하번호' },
              { name: '출하일' },
              { name: '수주번호' },
              { name: '거래처' },
              { name: '현장명' },
              { name: '출하수량' },
              { name: '상태' },
              { name: '작업' }
            ],
            action: {
              trigger: '행 클릭',
              behavior: '출하 상세 화면으로 이동',
              result: '출하 상세 정보 표시'
            },
            position: { area: 'table' }
          }
        ]
      }
    ]
  },

  // ========================================
  // 생산관리 - 작업지시관리
  // ========================================
  'work-order-list': {
    screenName: '작업지시 목록',
    menuPath: '생산관리 > 작업지시 관리',
    screenType: 'list',
    description: '작업지시 목록 조회, 상태별 관리, 작업지시서 발행',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          { id: 'page-title', type: 'text', label: '페이지 타이틀' },
          {
            id: 'btn-register',
            type: 'button',
            label: '작업지시 등록',
            action: {
              trigger: '버튼 클릭',
              behavior: 'view를 work-order-register로 변경',
              result: '작업지시 등록 화면 표시'
            },
            position: { area: 'header-right' }
          }
        ]
      },
      {
        title: '리포트 카드',
        layout: 'grid-4',
        elements: [
          { id: 'card-total', type: 'card', label: '총 작업지시' },
          {
            id: 'card-waiting',
            type: 'card',
            label: '작업대기',
            states: [
              { state: '0건', condition: '대기 없음', display: '0건 (회색)' },
              { state: 'N건', condition: '대기 있음', display: 'N건 (주황색)' }
            ]
          },
          { id: 'card-progress', type: 'card', label: '작업중' },
          { id: 'card-completed', type: 'card', label: '완료' }
        ]
      },
      {
        title: '상태 탭 필터',
        elements: [
          {
            id: 'tab-status',
            type: 'button',
            label: '상태 탭',
            description: '작업지시 상태별 필터링',
            options: ['전체', '작업대기', '작업중', '완료', '보류'],
            action: {
              trigger: '탭 클릭',
              behavior: '선택한 상태의 작업지시만 필터링',
              result: '상태별 작업지시 표시'
            },
            states: [
              { state: '전체', condition: '전체 탭 선택', display: '전체 탭 활성, 모든 건 표시' },
              { state: '작업대기', condition: '대기 탭 선택', display: '대기 탭 활성 + 건수 뱃지' },
              { state: '작업중', condition: '작업중 탭 선택', display: '작업중 탭 활성 + 건수 뱃지' },
              { state: '완료', condition: '완료 탭 선택', display: '완료 탭 활성 + 건수 뱃지' }
            ],
            position: { area: 'filter-tabs' }
          }
        ]
      },
      {
        title: '검색 영역',
        elements: [
          {
            id: 'search-input',
            type: 'input',
            label: '검색',
            placeholder: '작업지시번호, 수주번호, 거래처 검색...',
            position: { area: 'filter' }
          }
        ]
      },
      {
        title: '작업지시 목록 테이블',
        elements: [
          {
            id: 'table-work-orders',
            type: 'table',
            label: '작업지시 목록',
            columns: [
              { name: '선택' },
              { name: '작업지시번호', description: 'WO-YYMMDD-##' },
              { name: '수주번호', description: '연관 수주' },
              { name: '공정', description: '스크린/슬랫/절곡 등' },
              { name: '거래처' },
              { name: '현장명' },
              { name: '납기일' },
              { name: '담당자' },
              { name: '진행률', description: '완료수량/지시수량' },
              { name: '상태' },
              { name: '작업' }
            ],
            action: {
              trigger: '행 클릭',
              behavior: '작업지시 상세 화면으로 이동',
              result: '작업지시 상세 + 공정별 진행현황 표시'
            },
            states: [
              { state: '로딩', condition: 'API 호출 중', display: '스켈레톤 UI' },
              { state: '데이터있음', condition: '작업지시 존재', display: '작업지시 목록' },
              { state: '데이터없음', condition: '작업지시 없음', display: '"등록된 작업지시가 없습니다"' }
            ],
            position: { area: 'table' }
          },
          {
            id: 'progress-bar',
            type: 'display',
            label: '진행률 바',
            description: '작업지시별 진행 상황 시각화',
            states: [
              { state: '0%', condition: '진행 없음', display: '회색 빈 바' },
              { state: '진행중', condition: '0 < progress < 100', display: '파란색 바 + 퍼센트' },
              { state: '100%', condition: '완료', display: '녹색 바' }
            ]
          }
        ]
      }
    ]
  },

  'work-order-detail': {
    screenName: '작업지시 상세',
    menuPath: '생산관리 > 작업지시 관리 > 상세',
    screenType: 'detail',
    description: '작업지시 상세 정보, 공정별 진행현황, 실적 등록/조회',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          { id: 'page-title', type: 'text', label: '페이지 타이틀' },
          {
            id: 'status-badge',
            type: 'display',
            label: '상태 뱃지',
            states: [
              { state: '작업대기', display: '회색 뱃지' },
              { state: '작업중', display: '파란색 뱃지' },
              { state: '완료', display: '녹색 뱃지' },
              { state: '보류', display: '주황색 뱃지' }
            ]
          },
          {
            id: 'btn-print-work-order',
            type: 'button',
            label: '작업지시서 출력',
            action: {
              trigger: '버튼 클릭',
              behavior: '작업지시서 PDF 미리보기 모달 표시',
              result: 'PDF 출력/다운로드'
            },
            position: { area: 'header-doc-left' }
          },
          {
            id: 'btn-list',
            type: 'button',
            label: '목록',
            action: {
              trigger: '버튼 클릭',
              behavior: 'view를 work-order-list로 변경'
            },
            position: { area: 'header-actions-right' }
          },
          {
            id: 'btn-edit',
            type: 'button',
            label: '수정',
            condition: 'status !== "완료"',
            action: {
              trigger: '버튼 클릭',
              behavior: 'view를 work-order-edit로 변경'
            },
            position: { area: 'header-actions-right' }
          }
        ]
      },
      {
        title: '기본정보 섹션',
        layout: 'detail-grid-3',
        elements: [
          { id: 'info-wo-no', type: 'display', label: '작업지시번호' },
          { id: 'info-order-no', type: 'display', label: '수주번호', description: '클릭 시 수주 상세로 이동' },
          { id: 'info-process', type: 'display', label: '공정' },
          { id: 'info-customer', type: 'display', label: '거래처' },
          { id: 'info-site', type: 'display', label: '현장명' },
          { id: 'info-due-date', type: 'display', label: '납기일' },
          { id: 'info-assignee', type: 'display', label: '담당자' },
          { id: 'info-qty', type: 'display', label: '지시수량' },
          { id: 'info-completed', type: 'display', label: '완료수량' }
        ]
      },
      {
        title: '공정 진행 현황',
        description: '공정별 단계 진행 상황 표시',
        elements: [
          {
            id: 'process-steps',
            type: 'display',
            label: '공정 단계',
            description: '공정별 세부 단계 진행 상황',
            states: [
              { state: '대기', condition: '미시작', display: '회색 원' },
              { state: '진행중', condition: '현재 단계', display: '파란색 원 + 펄스 애니메이션' },
              { state: '완료', condition: '완료 단계', display: '녹색 체크 원' }
            ]
          }
        ]
      },
      {
        title: '품목 목록 섹션',
        elements: [
          {
            id: 'items-table',
            type: 'table',
            label: '작업 품목',
            columns: [
              { name: 'No' },
              { name: '품목코드' },
              { name: '품명' },
              { name: '규격' },
              { name: '지시수량' },
              { name: '완료수량' },
              { name: '불량수량' },
              { name: '상태' }
            ]
          }
        ]
      },
      {
        title: '실적 등록/조회',
        elements: [
          {
            id: 'btn-add-result',
            type: 'button',
            label: '실적 등록',
            description: '작업 실적 등록',
            condition: 'status === "작업중"',
            action: {
              trigger: '버튼 클릭',
              behavior: '실적 등록 모달 또는 화면 표시',
              result: '양품/불량 수량 입력 후 저장'
            },
            states: [
              { state: '활성', condition: '작업중 상태', display: '녹색 버튼' },
              { state: '비활성', condition: '대기 또는 완료', display: '회색 버튼' }
            ]
          },
          {
            id: 'results-list',
            type: 'table',
            label: '실적 내역',
            columns: [
              { name: '등록일시' },
              { name: '양품수량' },
              { name: '불량수량' },
              { name: '작업자' },
              { name: '비고' }
            ]
          }
        ]
      }
    ]
  },

  // ========================================
  // 품질관리 - 검사관리
  // ========================================
  'inspection-list': {
    screenName: '검사 목록',
    menuPath: '품질관리 > 검사관리',
    screenType: 'list',
    description: '품질검사 목록 조회, IQC/PQC/FQC 검사 관리',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          { id: 'page-title', type: 'text', label: '페이지 타이틀' },
          {
            id: 'btn-register',
            type: 'button',
            label: '검사 등록',
            action: {
              trigger: '버튼 클릭',
              behavior: '검사 등록 화면으로 이동',
              result: '검사 유형 선택 및 등록 폼 표시'
            },
            position: { area: 'header-right' }
          }
        ]
      },
      {
        title: '검사유형 탭',
        elements: [
          {
            id: 'tab-inspection-type',
            type: 'button',
            label: '검사유형 탭',
            options: ['전체', 'IQC (수입검사)', 'PQC (공정검사)', 'FQC (최종검사)'],
            action: {
              trigger: '탭 클릭',
              behavior: '선택한 검사유형만 필터링',
              result: '검사유형별 목록 표시'
            },
            states: [
              { state: '전체', display: '전체 탭 활성' },
              { state: 'IQC', display: 'IQC 탭 활성 + 건수' },
              { state: 'PQC', display: 'PQC 탭 활성 + 건수' },
              { state: 'FQC', display: 'FQC 탭 활성 + 건수' }
            ]
          }
        ]
      },
      {
        title: '검사 목록 테이블',
        elements: [
          {
            id: 'table-inspections',
            type: 'table',
            label: '검사 목록',
            columns: [
              { name: '선택' },
              { name: '검사번호' },
              { name: '검사유형' },
              { name: '검사일' },
              { name: 'LOT번호' },
              { name: '품목' },
              { name: '검사수량' },
              { name: '합격수량' },
              { name: '불합격수량' },
              { name: '결과' },
              { name: '검사자' },
              { name: '작업' }
            ],
            action: {
              trigger: '행 클릭',
              behavior: '검사 상세 화면으로 이동',
              result: '검사 상세 + 항목별 결과 표시'
            },
            states: [
              { state: '데이터있음', display: '검사 목록 (최신순)' },
              { state: '데이터없음', display: '"등록된 검사가 없습니다"' }
            ]
          },
          {
            id: 'result-badge',
            type: 'display',
            label: '검사결과 뱃지',
            states: [
              { state: '합격', display: '녹색 뱃지' },
              { state: '불합격', display: '빨간색 뱃지' },
              { state: '조건부합격', display: '주황색 뱃지' },
              { state: '검사중', display: '파란색 뱃지' }
            ]
          }
        ]
      }
    ]
  },

  // ========================================
  // 기준정보 - 품목기준관리
  // ========================================
  'item-master-list': {
    screenName: '품목 목록',
    menuPath: '기준정보 > 품목기준관리',
    screenType: 'list',
    description: '품목 마스터 데이터 관리, 품목 등록/수정/삭제',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          { id: 'page-title', type: 'text', label: '페이지 타이틀' },
          {
            id: 'btn-register',
            type: 'button',
            label: '품목 등록',
            action: {
              trigger: '버튼 클릭',
              behavior: '품목 등록 화면으로 이동',
              result: '품목 등록 폼 표시'
            }
          }
        ]
      },
      {
        title: '리포트 카드',
        layout: 'grid-4',
        elements: [
          { id: 'card-total', type: 'card', label: '총 품목' },
          { id: 'card-product', type: 'card', label: '제품' },
          { id: 'card-material', type: 'card', label: '원자재' },
          { id: 'card-part', type: 'card', label: '부품' }
        ]
      },
      {
        title: '검색/필터 영역',
        elements: [
          {
            id: 'search-input',
            type: 'input',
            label: '검색',
            placeholder: '품목코드, 품목명 검색...'
          },
          {
            id: 'filter-type',
            type: 'select',
            label: '품목유형',
            options: ['전체', '제품', '반제품', '원자재', '부자재', '소모품']
          }
        ]
      },
      {
        title: '품목 목록 테이블',
        elements: [
          {
            id: 'table-items',
            type: 'table',
            label: '품목 목록',
            columns: [
              { name: '선택' },
              { name: '품목코드' },
              { name: '품목명' },
              { name: '품목유형' },
              { name: '규격' },
              { name: '단위' },
              { name: '안전재고' },
              { name: '사용여부' },
              { name: '작업' }
            ],
            action: {
              trigger: '행 클릭',
              behavior: '품목 상세 화면으로 이동'
            }
          }
        ]
      }
    ]
  },

  // ========================================
  // 기준정보 - 거래처관리
  // ========================================
  'customer-list': {
    screenName: '거래처 목록',
    menuPath: '판매관리 > 거래처관리',
    screenType: 'list',
    description: '거래처 정보 관리, 신용등급, 결제조건 설정',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          { id: 'page-title', type: 'text', label: '페이지 타이틀' },
          {
            id: 'btn-register',
            type: 'button',
            label: '거래처 등록',
            action: {
              trigger: '버튼 클릭',
              behavior: '거래처 등록 화면으로 이동'
            }
          }
        ]
      },
      {
        title: '리포트 카드',
        layout: 'grid-4',
        elements: [
          { id: 'card-total', type: 'card', label: '총 거래처' },
          { id: 'card-active', type: 'card', label: '거래중' },
          { id: 'card-new', type: 'card', label: '신규' },
          { id: 'card-inactive', type: 'card', label: '거래중단' }
        ]
      },
      {
        title: '검색 영역',
        elements: [
          {
            id: 'search-input',
            type: 'input',
            label: '검색',
            placeholder: '거래처명, 사업자번호, 담당자 검색...'
          }
        ]
      },
      {
        title: '거래처 목록 테이블',
        elements: [
          {
            id: 'table-customers',
            type: 'table',
            label: '거래처 목록',
            columns: [
              { name: '선택' },
              { name: '거래처코드' },
              { name: '거래처명' },
              { name: '사업자번호' },
              { name: '대표자' },
              { name: '연락처' },
              { name: '신용등급' },
              { name: '결제조건' },
              { name: '상태' },
              { name: '작업' }
            ],
            action: {
              trigger: '행 클릭',
              behavior: '거래처 상세 화면으로 이동'
            }
          },
          {
            id: 'credit-grade-badge',
            type: 'display',
            label: '신용등급 뱃지',
            states: [
              { state: 'A등급', display: '녹색 뱃지' },
              { state: 'B등급', display: '파란색 뱃지' },
              { state: 'C등급', display: '주황색 뱃지' },
              { state: 'D등급', display: '빨간색 뱃지' }
            ]
          }
        ]
      }
    ]
  },

  // ========================================
  // 생산관리 - 생산현황판
  // ========================================
  'production-dashboard-list': {
    screenName: '생산 현황판',
    menuPath: '생산관리 > 생산 현황판',
    screenType: 'dashboard',
    description: '실시간 생산 현황 모니터링, 라인별 상태, 알림',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          { id: 'page-title', type: 'text', label: '생산 현황판' },
          {
            id: 'date-selector',
            type: 'date',
            label: '날짜 선택',
            description: '조회 기준 날짜',
            states: [
              { state: '오늘', condition: '기본값', display: '오늘 날짜' },
              { state: '선택', condition: '다른 날짜', display: '선택한 날짜' }
            ]
          },
          {
            id: 'btn-refresh',
            type: 'button',
            label: '새로고침',
            action: {
              trigger: '버튼 클릭',
              behavior: '모든 현황 데이터 재조회',
              result: '차트/테이블 데이터 갱신'
            },
            states: [
              { state: '대기', display: '새로고침 아이콘' },
              { state: '로딩', display: '스피너 아이콘' }
            ]
          }
        ]
      },
      {
        title: '요약 카드',
        layout: 'grid-4',
        elements: [
          {
            id: 'card-total-orders',
            type: 'card',
            label: '오늘 작업지시',
            description: '오늘 기준 작업지시 건수'
          },
          {
            id: 'card-completed',
            type: 'card',
            label: '완료',
            description: '완료된 작업 건수',
            states: [
              { state: '목표미달', condition: '완료율 < 80%', display: '빨간색' },
              { state: '목표근접', condition: '80% <= 완료율 < 100%', display: '주황색' },
              { state: '목표달성', condition: '완료율 >= 100%', display: '녹색' }
            ]
          },
          {
            id: 'card-progress',
            type: 'card',
            label: '진행중',
            description: '현재 진행 중인 작업'
          },
          {
            id: 'card-delay',
            type: 'card',
            label: '지연',
            description: '납기 지연 건수',
            states: [
              { state: '정상', condition: '지연 0건', display: '0건 (녹색)' },
              { state: '경고', condition: '지연 있음', display: 'N건 (빨간색)' }
            ]
          }
        ]
      },
      {
        title: '생산 현황 차트',
        elements: [
          {
            id: 'chart-production',
            type: 'display',
            label: '시간대별 생산량',
            description: '시간대별 생산 추이 차트',
            action: {
              trigger: '차트 영역 호버',
              behavior: '해당 시간대 상세 정보 툴팁 표시'
            },
            states: [
              { state: '로딩', display: '차트 스켈레톤' },
              { state: '표시', display: '막대/선 차트' }
            ]
          }
        ]
      },
      {
        title: '라인별 현황',
        elements: [
          {
            id: 'line-status-cards',
            type: 'card',
            label: '라인별 상태',
            description: '각 생산 라인의 현재 상태',
            action: {
              trigger: '라인 카드 클릭',
              behavior: '해당 라인의 작업지시 목록으로 이동'
            },
            states: [
              { state: '가동중', display: '녹색 상태바 + "가동중"' },
              { state: '대기', display: '노란색 상태바 + "대기"' },
              { state: '정지', display: '빨간색 상태바 + "정지"' },
              { state: '점검중', display: '파란색 상태바 + "점검중"' }
            ]
          }
        ]
      },
      {
        title: '긴급/지연 알림',
        elements: [
          {
            id: 'alert-list',
            type: 'display',
            label: '알림 목록',
            description: '긴급 및 지연 작업 알림',
            action: {
              trigger: '알림 항목 클릭',
              behavior: '해당 작업지시 상세로 이동'
            },
            states: [
              { state: '없음', display: '"현재 알림이 없습니다"' },
              { state: '있음', display: '알림 목록 (심각도별 색상)' }
            ]
          }
        ]
      }
    ]
  },

  // ========================================
  // 자재관리 - 재고현황
  // ========================================
  'stock-list': {
    screenName: '재고 현황',
    menuPath: '자재관리 > 재고현황',
    screenType: 'list',
    description: '품목별 재고 현황 조회, 안전재고 알림',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          { id: 'page-title', type: 'text', label: '페이지 타이틀' },
          {
            id: 'btn-shortage-alert',
            type: 'button',
            label: '부족 알림',
            description: '안전재고 미달 품목 확인',
            action: {
              trigger: '버튼 클릭',
              behavior: '부족 품목 목록 팝오버 표시'
            },
            states: [
              { state: '정상', condition: '부족 0건', display: '회색 아이콘' },
              { state: '경고', condition: '부족 있음', display: '빨간 아이콘 + 건수 뱃지' }
            ]
          },
          {
            id: 'btn-export',
            type: 'button',
            label: '엑셀 다운로드',
            action: {
              trigger: '버튼 클릭',
              behavior: '현재 목록 엑셀 파일로 다운로드'
            }
          }
        ]
      },
      {
        title: '검색/필터 영역',
        elements: [
          {
            id: 'search-input',
            type: 'input',
            label: '검색',
            placeholder: '품목코드, 품목명 검색...'
          },
          {
            id: 'filter-warehouse',
            type: 'select',
            label: '창고 필터',
            options: ['전체 창고', '원자재창고', '반제품창고', '완제품창고'],
            action: {
              trigger: '창고 선택',
              behavior: '해당 창고의 재고만 필터링'
            }
          }
        ]
      },
      {
        title: '재고 목록 테이블',
        elements: [
          {
            id: 'table-stocks',
            type: 'table',
            label: '재고 목록',
            columns: [
              { name: '품목코드' },
              { name: '품목명' },
              { name: '창고' },
              { name: '현재고', description: '현재 재고량' },
              { name: '안전재고', description: '최소 유지 재고량' },
              { name: '부족량', description: '안전재고 - 현재고 (음수면 여유)' },
              { name: '단위' },
              { name: '최종입고일' }
            ],
            action: {
              trigger: '행 클릭',
              behavior: 'LOT별 재고 상세 모달 표시'
            },
            states: [
              { state: '정상', condition: '현재고 >= 안전재고', display: '일반 텍스트' },
              { state: '부족', condition: '현재고 < 안전재고', display: '빨간색 텍스트 + 경고 아이콘' }
            ]
          }
        ]
      }
    ]
  },

  // ========================================
  // 회계관리
  // ========================================
  'acc-customer-list': {
    screenName: '거래처관리 (회계)',
    menuPath: '회계관리 > 거래처관리',
    screenType: 'list',
    description: '거래처 신용등급 관리, 결제조건 설정',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          { id: 'page-title', type: 'text', label: '거래처관리' },
          {
            id: 'btn-register',
            type: 'button',
            label: '등록',
            action: { trigger: '버튼 클릭', behavior: '신용등급 등록 화면으로 이동' }
          }
        ]
      },
      {
        title: '거래처 목록',
        elements: [
          {
            id: 'table-acc-customers',
            type: 'table',
            label: '거래처 신용등급 목록',
            columns: [
              { name: '거래처코드' },
              { name: '거래처명' },
              { name: '신용등급' },
              { name: '여신한도' },
              { name: '현재미수금' },
              { name: '결제조건' },
              { name: '최근거래일' }
            ]
          }
        ]
      }
    ]
  },

  'sales-list': {
    screenName: '매출 목록',
    menuPath: '회계관리 > 매출관리',
    screenType: 'list',
    description: '출하 완료된 매출 건 조회 및 세금계산서 발행',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          { id: 'page-title', type: 'text', label: '매출관리' }
        ]
      },
      {
        title: '매출 목록',
        elements: [
          {
            id: 'table-sales',
            type: 'table',
            label: '매출 목록',
            columns: [
              { name: '매출번호' },
              { name: '매출일' },
              { name: '거래처' },
              { name: '출하번호' },
              { name: '매출금액' },
              { name: '세금계산서' },
              { name: '수금상태' }
            ],
            action: {
              trigger: '행 클릭',
              behavior: '매출 상세 화면으로 이동'
            }
          }
        ]
      }
    ]
  },

  'collection-list': {
    screenName: '수금 목록',
    menuPath: '회계관리 > 수금관리',
    screenType: 'list',
    description: '수금 현황 조회 및 미수금 관리',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          { id: 'page-title', type: 'text', label: '수금관리' },
          {
            id: 'btn-register',
            type: 'button',
            label: '수금 등록'
          },
          {
            id: 'btn-receivables',
            type: 'button',
            label: '미수금 현황',
            action: {
              trigger: '버튼 클릭',
              behavior: '미수금 현황 모달/페이지 표시'
            },
            states: [
              { state: '정상', condition: '연체 없음', display: '일반 버튼' },
              { state: '경고', condition: '연체 있음', display: '빨간 뱃지 표시' }
            ]
          }
        ]
      },
      {
        title: '수금 목록',
        elements: [
          {
            id: 'table-collections',
            type: 'table',
            label: '수금 목록',
            columns: [
              { name: '수금번호' },
              { name: '수금일' },
              { name: '거래처' },
              { name: '수금금액' },
              { name: '수금방법' },
              { name: '관련매출' },
              { name: '메모' }
            ]
          }
        ]
      }
    ]
  },

  // ========================================
  // 시스템 관리
  // ========================================
  'users-list': {
    screenName: '사용자 목록',
    menuPath: '시스템 > 사용자관리',
    screenType: 'list',
    description: '시스템 사용자 관리, 권한 설정',
    sections: [
      {
        title: '헤더 영역',
        elements: [
          { id: 'page-title', type: 'text', label: '사용자관리' },
          {
            id: 'btn-register',
            type: 'button',
            label: '사용자 등록',
            condition: '관리자 권한',
            action: { trigger: '버튼 클릭', behavior: '사용자 등록 화면으로 이동' }
          }
        ]
      },
      {
        title: '사용자 목록',
        elements: [
          {
            id: 'table-users',
            type: 'table',
            label: '사용자 목록',
            columns: [
              { name: '사용자ID' },
              { name: '이름' },
              { name: '부서' },
              { name: '직급' },
              { name: '이메일' },
              { name: '권한그룹' },
              { name: '상태' },
              { name: '최근로그인' }
            ],
            action: {
              trigger: '행 클릭',
              behavior: '사용자 상세 화면으로 이동'
            }
          },
          {
            id: 'status-badge',
            type: 'display',
            label: '상태 뱃지',
            states: [
              { state: '활성', display: '녹색 뱃지' },
              { state: '비활성', display: '회색 뱃지' },
              { state: '잠금', display: '빨간색 뱃지' }
            ]
          }
        ]
      }
    ]
  },

  'settings-list': {
    screenName: '시스템설정',
    menuPath: '시스템 > 시스템설정',
    screenType: 'form',
    description: '시스템 전역 설정 관리',
    sections: [
      {
        title: '설정 카테고리',
        elements: [
          {
            id: 'tab-category',
            type: 'button',
            label: '설정 카테고리 탭',
            options: ['기본정보', '알림설정', '연동설정', '보안설정'],
            action: {
              trigger: '탭 클릭',
              behavior: '해당 카테고리 설정 항목 표시'
            }
          }
        ]
      },
      {
        title: '설정 항목',
        elements: [
          {
            id: 'settings-form',
            type: 'input',
            label: '설정 항목들',
            description: '카테고리별 설정 입력 필드',
            states: [
              { state: '저장됨', condition: '변경 없음', display: '일반 입력창' },
              { state: '변경됨', condition: '값 수정', display: '노란 테두리' },
              { state: '오류', condition: '유효성 실패', display: '빨간 테두리 + 오류메시지' }
            ]
          },
          {
            id: 'btn-save',
            type: 'button',
            label: '저장',
            action: {
              trigger: '버튼 클릭',
              behavior: '변경된 설정값 저장'
            },
            states: [
              { state: '비활성', condition: '변경 없음', display: '회색 버튼' },
              { state: '활성', condition: '변경 있음', display: 'Primary 버튼' },
              { state: '저장중', condition: 'API 호출', display: '로딩 스피너' }
            ]
          }
        ]
      }
    ]
  }
};

// ============================================================
// 헬퍼 함수들
// ============================================================

/**
 * 화면 ID로 기능 정의 템플릿 가져오기
 * @param {string} screenId - 화면 ID (예: 'quote-list', 'order-detail')
 * @returns {Object|null} 화면 기능 정의 템플릿
 */
export const getScreenFeatureTemplate = (screenId) => {
  // 직접 매칭
  if (screenFeatureTemplates[screenId]) {
    return screenFeatureTemplates[screenId];
  }

  // -list, -detail, -register 패턴 매칭
  const baseId = screenId.replace(/-list$|-detail$|-register$|-edit$|-create$/, '');
  const suffix = screenId.match(/-list$|-detail$|-register$|-edit$|-create$/)?.[0] || '';

  // 기본 ID로 찾기
  if (screenFeatureTemplates[baseId]) {
    return screenFeatureTemplates[baseId];
  }

  // view 이름 변환 시도 (예: customer -> customer-list)
  const listViewId = `${baseId}-list`;
  if (screenFeatureTemplates[listViewId]) {
    return screenFeatureTemplates[listViewId];
  }

  return null;
};

/**
 * 모든 화면 ID 목록 가져오기
 * @returns {string[]} 화면 ID 배열
 */
export const getAllScreenIds = () => {
  return Object.keys(screenFeatureTemplates);
};

/**
 * 화면 이름으로 ID 찾기
 * @param {string} screenName - 화면 이름
 * @returns {string|null} 화면 ID
 */
export const findScreenIdByName = (screenName) => {
  for (const [id, config] of Object.entries(screenFeatureTemplates)) {
    if (config.screenName === screenName) {
      return id;
    }
  }
  return null;
};

/**
 * 메뉴 경로로 화면 ID 찾기
 * @param {string} menuPath - 메뉴 경로 (예: '판매관리 > 견적관리')
 * @returns {string|null} 화면 ID
 */
export const findScreenIdByMenuPath = (menuPath) => {
  for (const [id, config] of Object.entries(screenFeatureTemplates)) {
    if (config.menuPath === menuPath) {
      return id;
    }
  }
  return null;
};

/**
 * 화면의 모든 요소에 순차 번호 부여
 * @param {Object} template - 화면 기능 정의 템플릿
 * @returns {Array} 번호가 부여된 요소 배열
 */
export const getNumberedElements = (template) => {
  if (!template?.sections) return [];

  const elements = [];
  let globalIndex = 1;

  template.sections.forEach((section, sectionIdx) => {
    section.elements?.forEach((element) => {
      elements.push({
        number: globalIndex++,
        sectionIndex: sectionIdx + 1,
        sectionTitle: section.title,
        ...element
      });

      // 하위 요소가 있으면 추가
      if (element.elements && element.elements.length > 0) {
        element.elements.forEach((subElement) => {
          elements.push({
            number: globalIndex++,
            sectionIndex: sectionIdx + 1,
            sectionTitle: section.title,
            parentLabel: element.label,
            isSubElement: true,
            ...subElement
          });
        });
      }
    });
  });

  return elements;
};

/**
 * view 이름을 screenId로 매핑
 * @param {string} view - 현재 view 이름
 * @returns {string} 매핑된 screenId
 */
export const mapViewToScreenId = (view) => {
  // 직접 매칭되는 경우
  if (screenFeatureTemplates[view]) {
    return view;
  }

  // view 이름 변환 맵
  const viewMapping = {
    'quote': 'quote-list',
    'order': 'order-list',
    'shipment': 'shipment-list',
    'work-order': 'work-order-list',
    'inspection': 'inspection-list',
    'stock': 'stock-list',
    'inbound': 'inbound-list',
    'customer': 'customer-list',
    'users': 'users-list',
    'settings': 'settings-list',
    'item-master': 'item-master-list',
    'process-master': 'process-master-list',
    'production-dashboard': 'production-dashboard-list',
    'acc-customer': 'acc-customer-list',
    'sales-account': 'sales-list',
    'collection': 'collection-list',
  };

  return viewMapping[view] || view;
};

export default screenFeatureTemplates;
