#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
語言檢測工具
用於檢測文本的語言，支援多種語言檢測算法
"""

import sys
import json
import argparse
from typing import Dict, List, Optional, Tuple
import re

# 簡單的語言檢測規則（可擴展）
LANGUAGE_DETECTION_RULES = {
    "zh-CN": {
        "patterns": [
            r"[\u4e00-\u9fff]",  # 中文字符
            r"的|是|在|有|和|了|不|人|我|他|她|它|們|這|那|你|您|們|嗎|呢|吧|啊|呀|哦|嗯|哈|嘿|哼|呸|唉|哎|喂|嗨|哈囉|你好|再見|謝謝|對不起|請|請問|不好意思|沒關係|沒問題|好的|可以|不行|不可以",
        ],
        "description": "簡體中文",
    },
    "zh-TW": {
        "patterns": [
            r"[\u4e00-\u9fff]",  # 中文字符
            r"的|是|在|有|和|了|不|人|我|他|她|它|們|這|那|你|您|們|嗎|呢|吧|啊|呀|哦|嗯|哈|嘿|哼|呸|唉|哎|喂|嗨|哈囉|你好|再見|謝謝|對不起|請|請問|不好意思|沒關係|沒問題|好的|可以|不行|不可以",
        ],
        "description": "繁體中文",
    },
    "en-US": {
        "patterns": [
            r"\bthe\b|\ba\b|\ban\b|\band\b|\bor\b|\bbut\b|\bin\b|\bon\b|\bat\b|\bto\b|\bfor\b|\bwith\b|\bby\b|\bas\b|\bis\b|\bare\b|\bwas\b|\bwere\b|\bbe\b|\bbeing\b|\bbeen\b",
            r"\bhello\b|\bhi\b|\bgoodbye\b|\bbye\b|\bthanks\b|\bthank you\b|\bsorry\b|\bplease\b|\bexcuse me\b|\bnever mind\b|\bok\b|\byes\b|\bno\b|\bnot\b|\bcannot\b",
        ],
        "description": "美式英文",
    },
    "ja-JP": {
        "patterns": [
            r"[\u3040-\u309f]",  # 平假名
            r"[\u30a0-\u30ff]",  # 片假名
            r"[\u4e00-\u9fff]",  # 漢字
            r"です|ます|でした|ません|ましょう|ください|お願い|ありがとう|すみません|こんにちは|さようなら|はい|いいえ",
        ],
        "description": "日文",
    },
    "ko-KR": {
        "patterns": [
            r"[\uac00-\ud7a3]",  # 韓文字符
            r"입니다|합니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|です|ます|でした|ません|ましょう|ください|お願い|ありがとう|すみません|こんにちは|さようなら|はい|いいえ",
        ],
        "description": "韓文",
    },
}


def detect_language(text: str) -> Tuple[str, float, Dict[str, float]]:
    """
    檢測文本語言

    Args:
        text: 輸入文本

    Returns:
        Tuple[主要語言, 置信度, 所有語言分數]
    """
    if not text or not text.strip():
        return "unknown", 0.0, {}

    text = text.strip()
    scores = {}

    for lang_code, lang_info in LANGUAGE_DETECTION_RULES.items():
        score = 0
        total_patterns = len(lang_info["patterns"])

        for pattern in lang_info["patterns"]:
            matches = re.findall(pattern, text, re.IGNORECASE)
            if matches:
                score += len(matches)

        # 計算分數
        if total_patterns > 0:
            scores[lang_code] = score / total_patterns
        else:
            scores[lang_code] = 0.0

    # 找到最高分數的語言
    if scores:
        best_lang = max(scores.items(), key=lambda x: x[1])
        return best_lang[0], best_lang[1], scores
    else:
        return "unknown", 0.0, {}


def main():
    parser = argparse.ArgumentParser(description="語言檢測工具")
    parser.add_argument("text", nargs="?", help="要檢測的文本")
    parser.add_argument("-f", "--file", help="從文件讀取文本")
    parser.add_argument("-j", "--json", action="store_true", help="輸出 JSON 格式")
    parser.add_argument("-v", "--verbose", action="store_true", help="詳細輸出")

    args = parser.parse_args()

    # 獲取文本
    text = ""
    if args.file:
        try:
            with open(args.file, "r", encoding="utf-8") as f:
                text = f.read()
        except Exception as e:
            print(f"讀取文件錯誤: {e}", file=sys.stderr)
            sys.exit(1)
    elif args.text:
        text = args.text
    else:
        # 從標準輸入讀取
        text = sys.stdin.read()

    # 檢測語言
    primary_lang, confidence, all_scores = detect_language(text)

    # 輸出結果
    if args.json:
        result = {
            "text": text[:100] + "..." if len(text) > 100 else text,
            "detected_language": primary_lang,
            "confidence": confidence,
            "language_scores": all_scores,
            "text_length": len(text),
        }
        print(json.dumps(result, ensure_ascii=False, indent=2))
    else:
        if args.verbose:
            print(f"文本: {text[:100]}{'...' if len(text) > 100 else ''}")
            print(f"長度: {len(text)} 字符")
            print(f"檢測結果: {primary_lang}")
            print(f"置信度: {confidence:.2%}")
            print("\n詳細分數:")
            for lang, score in sorted(
                all_scores.items(), key=lambda x: x[1], reverse=True
            ):
                lang_name = LANGUAGE_DETECTION_RULES.get(lang, {}).get(
                    "description", lang
                )
                print(f"  {lang} ({lang_name}): {score:.2%}")
        else:
            print(f"{primary_lang} ({confidence:.2%})")


if __name__ == "__main__":
    main()
