/**
 * 섹터 분류 — `/stocks discover sector <섹터>` 의 그룹 정의.
 *
 * v2 (근본 수정): 기존엔 전 종목을 시총으로 크롤한 뒤 Fundamentals.sectorHint 로
 * 필터했는데, 네이버 통합 API 에 우리가 찾던 industryInfo.name 필드가 없어
 * sectorHint 가 항상 비어 결과 0개가 나왔다. 실제로는 ① 통합 응답에 industryCode
 * (숫자) 가 있고 ② `m.stock.naver.com/api/stocks/industry/{code}` 가 업종별 종목을
 * 직접 반환한다. 그래서 친화 섹터 키 → *네이버 업종 코드 묶음* 으로 매핑하고,
 * discover 가 해당 코드의 종목을 직접 받아온다 (전 종목 크롤 불필요 — 빠르고 정확).
 *
 * 정본은 코드 한 곳(이 파일). 네이버 업종 분류(2026-06 기준, 79개)를 기반으로 작성.
 */

/** 네이버 업종 코드 → 이름 (sise_group upjong 기준). discover 가 섹터명 표시에 사용. */
export const NAVER_INDUSTRY_NAMES: Record<number, string> = {
    261: '제약', 262: '생명과학도구및서비스', 263: '게임엔터테인먼트', 264: '백화점과일반상점',
    265: '판매업체', 266: '화장품', 267: 'IT서비스', 268: '식품', 269: '디스플레이장비및부품',
    270: '자동차부품', 271: '레저용장비와제품', 272: '화학', 273: '자동차', 274: '섬유의류신발',
    276: '복합기업', 277: '창업투자', 278: '반도체와반도체장비', 279: '건설', 280: '부동산',
    281: '건강관리장비와용품', 282: '전자장비와기기', 283: '전기제품(2차전지)', 284: '우주항공과국방',
    285: '방송과엔터테인먼트', 286: '생물공학', 287: '소프트웨어', 288: '건강관리기술', 289: '건축자재',
    290: '교육서비스', 291: '조선', 292: '핸드셋', 293: '컴퓨터와주변기기', 294: '통신장비',
    295: '에너지장비및서비스', 296: '운송인프라', 299: '기계', 300: '양방향미디어와서비스', 301: '은행',
    302: '식품과기본식료품소매', 304: '철강', 305: '항공사', 306: '전기장비', 307: '전자제품',
    308: '인터넷과카탈로그소매', 309: '음료', 311: '포장재', 312: '가스유틸리티', 313: '석유와가스',
    314: '출판', 315: '손해보험', 316: '건강관리업체및서비스', 318: '종이와목재', 319: '기타금융',
    320: '건축제품', 321: '증권', 322: '비철금속', 323: '해운사', 325: '전기유틸리티',
    326: '항공화물운송과물류', 327: '디스플레이패널', 328: '전문소매', 329: '도로와철도운송',
    330: '생명보험', 331: '복합유틸리티', 333: '무선통신서비스', 336: '다각화된통신서비스',
    337: '카드', 338: '사무용전자제품', 339: '다각화된소비자서비스',
};

export interface SectorGroup {
    /** 사용자 입력·표시용 친화 키 (한글). */
    key: string;
    /** 영문/대체 별칭 (사용자가 다르게 입력해도 매칭). */
    aliases: string[];
    /** 이 섹터에 포함되는 네이버 업종 코드 묶음. discover 가 직접 종목을 받아온다. */
    codes: number[];
}

export const SECTOR_GROUPS: SectorGroup[] = [
    { key: '반도체', aliases: ['semiconductor', 'semicon', 'chip', '디스플레이'], codes: [278, 269, 327] },
    { key: '2차전지', aliases: ['battery', '배터리', '전지', 'ev'], codes: [283, 306] },
    { key: '바이오/제약', aliases: ['bio', 'pharma', '제약', '바이오', '헬스케어', 'healthcare'], codes: [261, 286, 262, 281, 288, 316] },
    { key: 'IT/소프트웨어', aliases: ['it', 'software', 'sw', '소프트웨어', '컴퓨터'], codes: [267, 287, 293, 338] },
    { key: '게임/콘텐츠', aliases: ['game', '게임', 'content', 'media', '엔터', 'entertainment'], codes: [263, 285, 300, 314] },
    { key: '자동차', aliases: ['auto', 'car', '자동차부품', 'automobile'], codes: [273, 270] },
    { key: '금융', aliases: ['finance', 'bank', '은행', '증권', '보험', 'insurance'], codes: [301, 321, 330, 315, 337, 319, 277] },
    { key: '화학/소재', aliases: ['chemical', '화학', 'material', '소재'], codes: [272, 311, 318] },
    { key: '철강/금속', aliases: ['steel', '철강', 'metal', '금속'], codes: [304, 322] },
    { key: '조선/기계', aliases: ['shipbuilding', '조선', 'machinery', '기계'], codes: [291, 299] },
    { key: '건설/부동산', aliases: ['construction', '건설', 'realestate', '부동산'], codes: [279, 280, 289, 320] },
    { key: '유통/소비재', aliases: ['retail', '유통', 'consumer', '식품', '화장품', 'food'], codes: [264, 266, 268, 302, 309, 328, 308, 274, 265] },
    { key: '에너지/유틸리티', aliases: ['energy', '에너지', 'utility', '전력', 'power', 'oil'], codes: [313, 325, 312, 295, 331] },
    { key: '통신', aliases: ['telecom', '통신', 'telecommunication'], codes: [294, 333, 336, 292] },
    { key: '운송/물류', aliases: ['logistics', '물류', 'transport', '운송', 'shipping'], codes: [326, 329, 323, 305, 296] },
    { key: '방산/항공우주', aliases: ['defense', '방산', 'aerospace', '항공우주'], codes: [284] },
    { key: '전자부품/장비', aliases: ['electronics', '전자', 'component'], codes: [282, 307] },
];

/** 사용자 입력 → 섹터 그룹. 친화키·별칭 매칭. 없으면 null. */
export function resolveSectorQuery(input: string): SectorGroup | null {
    const q = (input || '').trim().toLowerCase();
    if (!q) return null;
    // 1) 친화 키 정확/부분 일치
    for (const g of SECTOR_GROUPS) {
        const k = g.key.toLowerCase();
        if (k === q || k.includes(q) || q.includes(k)) return g;
    }
    // 2) 별칭 일치 (정확 또는 포함)
    for (const g of SECTOR_GROUPS) {
        if (g.aliases.some(a => { const al = a.toLowerCase(); return al === q || al.includes(q) || q.includes(al); })) return g;
    }
    // 3) 네이버 업종명 직접 입력 (예: "반도체와반도체장비") → 그 코드를 포함한 그룹
    for (const g of SECTOR_GROUPS) {
        if (g.codes.some(c => { const n = (NAVER_INDUSTRY_NAMES[c] || '').toLowerCase(); return n && (n.includes(q) || q.includes(n)); })) return g;
    }
    return null;
}

/** 사용 가능한 섹터 키 목록 (CLI 안내·도움말용). */
export function listSectorKeys(): string[] {
    return SECTOR_GROUPS.map(g => g.key);
}
