#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
通知模板資料模型
用於管理 n8n 和系統通知的訊息模板
"""

from sqlalchemy import Column, Integer, String, Text, Boolean, DateTime
from database.models import Base
from datetime import datetime, timezone, timedelta

TAIPEI_TZ = timezone(timedelta(hours=8))


class NotificationTemplate(Base):
    """通知模板"""
    __tablename__ = 'notification_templates'

    id = Column(Integer, primary_key=True)
    code = Column(String(50), unique=True, nullable=False)  # 模板代碼，如 'disk_alert'
    name = Column(String(100), nullable=False)              # 顯示名稱
    category = Column(String(50), nullable=False)           # 分類：system, business, report
    channel = Column(String(20), default='telegram')        # 通知渠道：telegram, line, both

    # 模板內容
    title = Column(String(200))                             # 標題
    body = Column(Text, nullable=False)                     # 訊息內容（支援變數）
    emoji_prefix = Column(String(10))                       # 前綴 emoji

    # 狀態
    is_active = Column(Boolean, default=True)

    # 時間戳
    created_at = Column(DateTime, default=lambda: datetime.now(TAIPEI_TZ).replace(tzinfo=None))
    updated_at = Column(DateTime, onupdate=lambda: datetime.now(TAIPEI_TZ).replace(tzinfo=None))

    def to_dict(self):
        return {
            'id': self.id,
            'code': self.code,
            'name': self.name,
            'category': self.category,
            'channel': self.channel,
            'title': self.title,
            'body': self.body,
            'emoji_prefix': self.emoji_prefix,
            'is_active': self.is_active,
            'created_at': self.created_at.isoformat() if self.created_at else None,
            'updated_at': self.updated_at.isoformat() if self.updated_at else None
        }


# 預設模板
DEFAULT_TEMPLATES = [
    {
        'code': 'disk_warning',
        'name': '磁碟空間警告',
        'category': 'system',
        'channel': 'telegram',
        'emoji_prefix': '🟠',
        'title': '磁碟空間警告',
        'body': '''📊 使用率: {usage_percent}%
💾 剩餘: {free_gb} GB / {total_gb} GB

🔧 正在執行自動清理...'''
    },
    {
        'code': 'disk_critical',
        'name': '磁碟空間嚴重不足',
        'category': 'system',
        'channel': 'telegram',
        'emoji_prefix': '🔴',
        'title': '磁碟空間嚴重不足',
        'body': '''📊 使用率: {usage_percent}%
💾 剩餘: {free_gb} GB / {total_gb} GB

⚠️ 立即執行緊急清理！'''
    },
    {
        'code': 'cleanup_complete',
        'name': '自動清理完成',
        'category': 'system',
        'channel': 'telegram',
        'emoji_prefix': '✅',
        'title': '自動清理完成',
        'body': '''🧹 清理結果:
{results}

📊 清理後使用率: {new_usage_percent}%'''
    },
    {
        'code': 'ssl_warning',
        'name': 'SSL 證書即將到期',
        'category': 'system',
        'channel': 'telegram',
        'emoji_prefix': '🟡',
        'title': 'SSL 證書警告',
        'body': '''{issues}

💡 執行: sudo certbot renew --nginx'''
    },
    {
        'code': 'pod_unhealthy',
        'name': 'K8s Pod 異常',
        'category': 'system',
        'channel': 'telegram',
        'emoji_prefix': '🔴',
        'title': 'K8s Pod 異常',
        'body': '''📍 狀態: {status}
🗄️ 資料庫: {database}

🔧 正在嘗試重啟...'''
    },
    {
        'code': 'pod_restart_result',
        'name': 'Pod 重啟結果',
        'category': 'system',
        'channel': 'telegram',
        'emoji_prefix': '✅',
        'title': 'Pod 重啟完成',
        'body': '''{deployment} 已重啟，等待恢復中...'''
    },
    {
        'code': 'crawler_warning',
        'name': '爬蟲執行警告',
        'category': 'system',
        'channel': 'telegram',
        'emoji_prefix': '🟠',
        'title': '爬蟲監控警告',
        'body': '''{issues}

🔧 正在嘗試重啟 scheduler...'''
    },
    {
        'code': 'harbor_unhealthy',
        'name': 'Harbor Registry 異常',
        'category': 'system',
        'channel': 'telegram',
        'emoji_prefix': '🟠',
        'title': 'Harbor Registry 異常',
        'body': '''📍 狀態: {status}
❌ 錯誤: {error}

💡 請檢查 Harbor 服務
執行: docker restart harbor-core harbor-nginx'''
    },
    {
        'code': 'backup_warning',
        'name': '備份監控警告',
        'category': 'system',
        'channel': 'telegram',
        'emoji_prefix': '🟠',
        'title': '備份監控警告',
        'body': '''{error}

💡 請檢查備份排程'''
    },
    {
        'code': 'cicd_success',
        'name': 'CI/CD 成功',
        'category': 'system',
        'channel': 'telegram',
        'emoji_prefix': '✅',
        'title': 'CI/CD Pipeline SUCCESS',
        'body': '''📦 專案: {project}
🌿 分支: {branch}
🆔 Pipeline: #{pipeline_id}
💬 Commit: {commit_message}
👤 作者: {author}
⏱️ 耗時: {duration}

🔗 查看詳情: {url}'''
    },
    {
        'code': 'cicd_failed',
        'name': 'CI/CD 失敗',
        'category': 'system',
        'channel': 'telegram',
        'emoji_prefix': '❌',
        'title': 'CI/CD Pipeline FAILED',
        'body': '''📦 專案: {project}
🌿 分支: {branch}
🆔 Pipeline: #{pipeline_id}
💬 Commit: {commit_message}
👤 作者: {author}

🔗 查看詳情: {url}'''
    },
    {
        'code': 'daily_report',
        'name': '每日系統狀態報告',
        'category': 'report',
        'channel': 'telegram',
        'emoji_prefix': '📊',
        'title': '每日系統狀態報告',
        'body': '''📅 日期: {date}

🖥️ 應用程式: {app_status}
💾 資料備份: {backup_status}
🕷️ 爬蟲排程: {crawler_status}

📦 最新備份: {last_backup}'''
    },
    {
        'code': 'weekly_sales',
        'name': '每週業績摘要',
        'category': 'business',
        'channel': 'telegram',
        'emoji_prefix': '📈',
        'title': '每週業績摘要',
        'body': '''📅 週期: {week_start} ~ {week_end}
💰 總業績: ${total_sales}
📦 訂單數: {order_count}
📈 成長率: {growth_rate}%

詳細報表請登入系統查看'''
    },
    {
        'code': 'monthly_reminder',
        'name': '月初作業提醒',
        'category': 'business',
        'channel': 'telegram',
        'emoji_prefix': '📅',
        'title': '{month}月初作業提醒',
        'body': '''✅ 待辦事項：

1️⃣ 匯出上月 ({prev_month}) 月結報表
2️⃣ 檢查 Google Drive 自動匯入設定
3️⃣ 確認爬蟲排程正常運作
4️⃣ 備份資料庫
5️⃣ 檢查系統日誌

💡 登入系統: https://mo.wooo.work'''
    }
]
