#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
最終安全去識別化工具

基於 Gemini 分析結果：
- 只替換被引號包圍的完整字串
- 不影響 JavaScript 程式碼、函數名稱、變數名稱
- 適用於 Plotly 圖表和 Folium 地圖
"""

import os
from pathlib import Path

class FinalAnonymizer:
    def __init__(self):
        # 縣市替換規則
        self.city_replacements = {
            '台北市': 'A市',
            '新北市': 'B市',
            '桃園市': 'C市',
            '新竹縣': 'D縣',
            '新竹市': 'E市',
            '苗栗縣': 'F縣',
            '台中市': 'G市',
            '彰化縣': 'H縣',
            '南投縣': 'I縣',
            '雲林縣': 'J縣',
            '嘉義縣': 'K縣',
            '嘉義市': 'L市',
            '台南市': 'M市',
            '高雄市': 'N市',
            '屏東縣': 'O縣',
            '宜蘭縣': 'P縣',
            '花蓮縣': 'Q縣',
            '台東縣': 'R縣',
            '澎湖縣': 'S縣',
            '金門縣': 'T縣',
            '連江縣': 'U縣',
            '基隆市': 'V市',
        }

        # 估價師替換規則
        self.appraiser_replacements = {
            '麗業': '估價師A',
            '尚上': '估價師B',
            '中徵': '估價師C',
            '瑞普': '估價師D',
            'DTZ': '估價師E',
            '戴德梁行': '估價師E',
            '信義': '估價師F',
            '歐亞': '估價師G',
        }

        # 其他替換
        self.other_replacements = {
            '新光人壽 2025Q4': '投資組合 Demo',
            '新光人壽': 'XX集團',
            '新光': 'XX',
            '2025Q4': '20XX',
            '2025': '20XX',
            '2,244': 'XX',  # 總金額
        }

    def safe_replace_quoted_strings(self, content, replacements):
        """
        安全替換：只替換被引號包圍的完整字串
        策略來自 Gemini 分析
        """
        for old_val, new_val in replacements.items():
            # 策略 1: 替換單引號包圍的字串 '台北市' -> 'A市'
            content = content.replace(f"'{old_val}'", f"'{new_val}'")

            # 策略 2: 替換雙引號包圍的字串 "台北市" -> "A市"
            content = content.replace(f'"{old_val}"', f'"{new_val}"')

            # 策略 3: 直接替換（用於 HTML 內容和一般文字）
            content = content.replace(old_val, new_val)

        return content

    def process_file(self, file_path):
        """處理單一檔案"""
        print(f"處理: {file_path.name}")

        try:
            with open(file_path, 'r', encoding='utf-8') as f:
                content = f.read()

            original_content = content

            # 按順序執行替換
            content = self.safe_replace_quoted_strings(content, self.other_replacements)
            content = self.safe_replace_quoted_strings(content, self.city_replacements)
            content = self.safe_replace_quoted_strings(content, self.appraiser_replacements)

            if content != original_content:
                with open(file_path, 'w', encoding='utf-8') as f:
                    f.write(content)
                print(f"  [OK] 已更新")
                return True
            else:
                print(f"  [-] 無需更新")
                return False

        except Exception as e:
            print(f"  [ERROR] 處理失敗: {e}")
            return False

    def process_directory(self, dir_path):
        """處理整個目錄"""
        dir_path = Path(dir_path)
        html_files = [f for f in dir_path.glob('*.html') if '.bak' not in f.name]

        print(f"\n開始處理 {len(html_files)} 個 HTML 檔案...")
        print("=" * 60)

        updated_count = 0
        for html_file in html_files:
            if self.process_file(html_file):
                updated_count += 1

        print("=" * 60)
        print(f"\n處理完成！更新了 {updated_count} 個檔案")
        print(f"\n已替換：")
        print(f"  - 縣市: {len(self.city_replacements)} 個")
        print(f"  - 估價師: {len(self.appraiser_replacements)} 個")
        print(f"  - 其他敏感資訊: {len(self.other_replacements)} 項")


if __name__ == '__main__':
    script_dir = Path(__file__).parent
    viz_dir = script_dir / 'visualization'

    if not viz_dir.exists():
        print(f"錯誤: 找不到 visualization 目錄")
        exit(1)

    print("=" * 60)
    print("最終安全去識別化工具")
    print("策略: 只替換被引號包圍的字串（基於 Gemini 分析）")
    print("=" * 60)

    anonymizer = FinalAnonymizer()
    anonymizer.process_directory(viz_dir)

    print("\n[OK] 所有檔案處理完成！")
    print("\n請測試：")
    print("1. 開啟 visualization/index.html")
    print("2. 點擊每個圖表，確認都能正常顯示")
    print("3. 檢查縣市名稱是否已改為 A市、B市 等")
