-- 메뉴 종류 (admin=관리자 상단 메뉴, site=사이트 첫페이지 등)
CREATE TABLE IF NOT EXISTS `menu_type` (
  `mt_idx`   INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '메뉴종류 PK',
  `mt_code`  VARCHAR(30)  NOT NULL DEFAULT '' COMMENT '코드(admin, site 등)',
  `mt_name`  VARCHAR(100) NOT NULL DEFAULT '' COMMENT '표시명',
  `mt_sort`  INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '정렬',
  PRIMARY KEY (`mt_idx`),
  UNIQUE KEY `uk_mt_code` (`mt_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='메뉴 종류';

-- 메뉴 항목 (지자체별 관리, 트리: mm_pidx=0 최상위, mm_dep 깊이, mm_num 형제순서)
CREATE TABLE IF NOT EXISTS `menu` (
  `mm_idx`     INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '메뉴 PK',
  `mt_idx`     INT UNSIGNED NOT NULL COMMENT '메뉴종류 FK',
  `lg_idx`     INT UNSIGNED NOT NULL COMMENT '지자체 FK',
  `mm_name`    VARCHAR(100) NOT NULL DEFAULT '' COMMENT '메뉴명',
  `mm_link`    VARCHAR(255) NOT NULL DEFAULT '' COMMENT '링크(예: admin/users)',
  `mm_pidx`    INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '부모 메뉴 PK(0=최상위)',
  `mm_dep`     TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '깊이(0,1,2)',
  `mm_num`     INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '형제 내 순서',
  `mm_cnode`   INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '자식 개수',
  `mm_level`   VARCHAR(50)  NOT NULL DEFAULT '' COMMENT '노출 허용 mb_level 쉼표구분(빈값=전체)',
  `mm_is_view` CHAR(1)      NOT NULL DEFAULT 'Y' COMMENT 'Y=노출, N=숨김',
  PRIMARY KEY (`mm_idx`),
  KEY `idx_mt_lg` (`mt_idx`, `lg_idx`),
  KEY `idx_mm_pidx` (`mm_pidx`),
  KEY `idx_mm_dep_num` (`mm_dep`, `mm_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='메뉴';

-- 초기 데이터: 메뉴 종류 (admin, site) + lg_idx=1 지자체용 기본 1차 메뉴
INSERT INTO `menu_type` (`mt_code`, `mt_name`, `mt_sort`) VALUES
('admin', '관리자 메뉴', 10),
('site',  '사이트 메뉴', 20);

-- admin 타입, lg_idx=1 기본 1차 관리자 메뉴
INSERT INTO `menu` (`mt_idx`, `lg_idx`, `mm_name`, `mm_link`, `mm_pidx`, `mm_dep`, `mm_num`, `mm_cnode`, `mm_level`, `mm_is_view`) VALUES
-- mt_idx=1 (admin)
(1, 1, '대시보드', 'admin', 0, 0, 0, 0, '3', 'Y'),
(1, 1, '회원 관리', 'admin/users', 0, 0, 1, 0, '', 'Y'),
(1, 1, '로그인 이력', 'admin/access/login-history', 0, 0, 2, 0, '', 'Y'),
(1, 1, '승인 대기', 'admin/access/approvals', 0, 0, 3, 0, '', 'Y'),
(1, 1, '역할', 'admin/roles', 0, 0, 4, 0, '', 'Y'),
(1, 1, '메뉴', 'admin/menus', 0, 0, 5, 0, '', 'Y'),
(1, 1, '지자체 전환', 'admin/select-local-government', 0, 0, 6, 0, '', 'Y'),
(1, 1, '지자체', 'admin/local-governments', 0, 0, 7, 0, '', 'Y'),
(1, 1, '지정판매소', 'bag/designated-shops', 0, 0, 8, 0, '3', 'Y'),

-- mt_idx=2 (site) 기본 1차 사이트 메뉴 (링크는 추후 실제 라우트로 변경)
(2, 1, '기본정보관리',          'bag/basic-info',        0, 0, 0, 0, '', 'Y'),
(2, 1, '발주 입고 관리',        'bag/purchase-inbound',  0, 0, 1, 0, '', 'Y'),
(2, 1, '불출 관리',             'bag/issue',             0, 0, 2, 0, '', 'Y'),
(2, 1, '재고 관리',             'bag/inventory',         0, 0, 3, 0, '', 'Y'),
(2, 1, '판매 관리',             'bag/sales',             0, 0, 4, 0, '', 'Y'),
(2, 1, '판매 현황',             'bag/sales-stats',       0, 0, 5, 0, '', 'Y'),
(2, 1, '봉투 수불 관리',        'bag/flow',              0, 0, 6, 0, '', 'Y'),
(2, 1, '통계 분석 관리',        'bag/analytics',         0, 0, 7, 0, '', 'Y'),
(2, 1, '창',                    'bag/window',            0, 0, 8, 0, '', 'Y'),
(2, 1, '도움말',                'bag/help',              0, 0, 9, 0, '', 'Y');

-- site: 기본정보관리 하위 "기본코드관리" (기존 DB 중복 방지: bag/code-kinds 없을 때만 추가)
INSERT INTO `menu` (`mt_idx`, `lg_idx`, `mm_name`, `mm_link`, `mm_pidx`, `mm_dep`, `mm_num`, `mm_cnode`, `mm_level`, `mm_is_view`)
SELECT m.mt_idx, m.lg_idx, '기본코드관리', 'bag/code-kinds', m.mm_idx, 1, 0, 0, '', 'Y'
FROM `menu` m
JOIN `menu_type` t ON t.mt_idx = m.mt_idx AND t.mt_code = 'site'
WHERE m.lg_idx = 1 AND m.mm_link = 'bag/basic-info' AND m.mm_pidx = 0
  AND NOT EXISTS (
    SELECT 1 FROM `menu` c WHERE c.mt_idx = m.mt_idx AND c.lg_idx = m.lg_idx AND c.mm_link = 'bag/code-kinds'
  )
LIMIT 1;

UPDATE `menu` m
JOIN `menu_type` t ON t.mt_idx = m.mt_idx AND t.mt_code = 'site'
SET m.mm_cnode = (
  SELECT COUNT(*) FROM `menu` c WHERE c.mm_pidx = m.mm_idx AND c.mt_idx = m.mt_idx AND c.lg_idx = m.lg_idx
)
WHERE m.lg_idx = 1 AND m.mm_link = 'bag/basic-info' AND m.mm_pidx = 0;
