#!/bin/bash

#############################################
# AI 夜間開發系統 - 控制面板
#############################################

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_FILE="$SCRIPT_DIR/project-configs.sh"
MAIN_SCRIPT="$SCRIPT_DIR/ai-dev-loop.sh"
LOG_DIR="${AI_DEV_LOG_DIR:-$HOME/.ai-dev-logs}"

# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# ============================================
# 功能函數
# ============================================

print_header() {
    echo -e "${BLUE}=========================================${NC}"
    echo -e "${BLUE}   AI 夜間開發系統 - 控制面板${NC}"
    echo -e "${BLUE}=========================================${NC}"
    echo ""
}

check_status() {
    echo -e "${YELLOW}系統狀態:${NC}"
    echo ""
    
    # 檢查 cron job
    if crontab -l 2>/dev/null | grep -q "$MAIN_SCRIPT"; then
        echo -e "  Cron Job: ${GREEN}✓ 已安裝${NC}"
        echo "  執行時間: 每小時的 00, 20, 40 分"
    else
        echo -e "  Cron Job: ${RED}✗ 未安裝${NC}"
    fi
    
    echo ""
    
    # 檢查目前配置
    if [ -n "$AI_DEV_PROJECT" ]; then
        echo -e "  目前專案: ${GREEN}$AI_DEV_PROJECT${NC}"
        echo "  專案目錄: $AI_DEV_PROJECT_DIR"
        echo "  AI Provider: $AI_DEV_AI_PROVIDER"
        echo "  執行狀態: $([ "$AI_DEV_ENABLE" = "true" ] && echo -e "${GREEN}啟用${NC}" || echo -e "${RED}停用${NC}")"
        
        # 檢查迭代次數
        if [ -f "$AI_DEV_PROJECT_DIR/.ai-dev-iteration" ]; then
            local iteration=$(cat "$AI_DEV_PROJECT_DIR/.ai-dev-iteration")
            echo "  目前迭代: $iteration / $AI_DEV_MAX_ITERATIONS"
        fi
        
        # 檢查是否完成
        if [ -f "$AI_DEV_PROJECT_DIR/.project-completed" ]; then
            echo -e "  專案狀態: ${GREEN}已完成${NC}"
        else
            echo -e "  專案狀態: ${YELLOW}進行中${NC}"
        fi
    else
        echo -e "  ${YELLOW}尚未載入專案配置${NC}"
        echo "  請先執行: source project-configs.sh && export_XXX_config"
    fi
    
    echo ""
}

start_project() {
    local project=$1
    
    if [ -z "$project" ]; then
        echo -e "${RED}錯誤: 請指定專案名稱${NC}"
        echo "可用專案: $(source "$CONFIG_FILE" && list_projects 2>/dev/null | tr '\n' ' ')"
        return 1
    fi
    
    # 載入配置
    source "$CONFIG_FILE"
    if ! load_project_config "$project"; then
        echo -e "${RED}未知的專案: $project${NC}"
        echo "可用專案: $(list_projects 2>/dev/null | tr '\n' ' ')"
        return 1
    fi
    
    # 將配置寫入環境檔案
    cat > "$HOME/.ai-dev-env" <<EOF
export AI_DEV_PROJECT="$AI_DEV_PROJECT"
export AI_DEV_PROJECT_DIR="$AI_DEV_PROJECT_DIR"
export AI_DEV_AI_PROVIDER="$AI_DEV_AI_PROVIDER"
export AI_DEV_ENABLE="true"
export AI_DEV_LOG_DIR="$AI_DEV_LOG_DIR"
export AI_DEV_MAX_ITERATIONS="$AI_DEV_MAX_ITERATIONS"
EOF
    
    echo -e "${GREEN}✓ 專案 $AI_DEV_PROJECT 已啟動${NC}"
    echo ""
    echo "接下來會在以下時間自動執行:"
    echo "  - 每小時的 00, 20, 40 分"
    echo ""
    echo "或立即執行測試:"
    echo "  source ~/.ai-dev-env && $MAIN_SCRIPT"
}

stop_project() {
    if [ -f "$HOME/.ai-dev-env" ]; then
        source "$HOME/.ai-dev-env"
        
        # 設置停用標記
        sed -i 's/AI_DEV_ENABLE="true"/AI_DEV_ENABLE="false"/' "$HOME/.ai-dev-env"
        
        echo -e "${YELLOW}專案 $AI_DEV_PROJECT 已停止${NC}"
        echo "Cron job 仍在運行，但不會執行任何動作"
    else
        echo -e "${YELLOW}沒有運行中的專案${NC}"
    fi
}

view_logs() {
    local log_type=$1
    
    if [ ! -d "$LOG_DIR" ]; then
        echo -e "${RED}Log 目錄不存在: $LOG_DIR${NC}"
        return 1
    fi
    
    case "$log_type" in
        latest|"")
            # 顯示最新的 session log
            local latest_log=$(ls -t "$LOG_DIR"/*.log 2>/dev/null | grep -v "master.log\|cron.log" | head -1)
            if [ -n "$latest_log" ]; then
                echo -e "${BLUE}最新 Session Log:${NC}"
                echo "檔案: $latest_log"
                echo ""
                tail -n 50 "$latest_log"
            else
                echo -e "${YELLOW}沒有找到 session log${NC}"
            fi
            ;;
        master)
            # 顯示 master log
            if [ -f "$LOG_DIR/master.log" ]; then
                echo -e "${BLUE}Master Log (最後 50 行):${NC}"
                tail -n 50 "$LOG_DIR/master.log"
            else
                echo -e "${YELLOW}Master log 不存在${NC}"
            fi
            ;;
        cron)
            # 顯示 cron log
            if [ -f "$LOG_DIR/cron.log" ]; then
                echo -e "${BLUE}Cron Log (最後 50 行):${NC}"
                tail -n 50 "$LOG_DIR/cron.log"
            else
                echo -e "${YELLOW}Cron log 不存在${NC}"
            fi
            ;;
        list)
            # 列出所有 logs
            echo -e "${BLUE}所有 Log 檔案:${NC}"
            ls -lht "$LOG_DIR"/*.log 2>/dev/null || echo "沒有 log 檔案"
            ;;
        *)
            echo -e "${RED}未知的 log 類型: $log_type${NC}"
            echo "可用選項: latest, master, cron, list"
            ;;
    esac
}

reset_project() {
    if [ -f "$HOME/.ai-dev-env" ]; then
        source "$HOME/.ai-dev-env"
        
        echo -e "${YELLOW}即將重置專案: $AI_DEV_PROJECT${NC}"
        echo "這將:"
        echo "  - 清除迭代計數"
        echo "  - 移除完成標記"
        echo "  - 保留 git 歷史和 logs"
        echo ""
        read -p "確定要繼續嗎？(y/n) " -n 1 -r
        echo
        
        if [[ $REPLY =~ ^[Yy]$ ]]; then
            rm -f "$AI_DEV_PROJECT_DIR/.ai-dev-iteration"
            rm -f "$AI_DEV_PROJECT_DIR/.project-completed"
            
            # 重新啟用
            sed -i 's/AI_DEV_ENABLE="false"/AI_DEV_ENABLE="true"/' "$HOME/.ai-dev-env"
            
            echo -e "${GREEN}✓ 專案已重置${NC}"
        else
            echo "取消重置"
        fi
    else
        echo -e "${RED}沒有可重置的專案${NC}"
    fi
}

run_now() {
    if [ -f "$HOME/.ai-dev-env" ]; then
        source "$HOME/.ai-dev-env"
        echo -e "${BLUE}立即執行專案: $AI_DEV_PROJECT${NC}"
        echo ""
        bash "$MAIN_SCRIPT"
    else
        echo -e "${RED}沒有配置的專案${NC}"
        echo "請先執行: $0 start <project>"
    fi
}

show_help() {
    local available_projects
    available_projects="$(source "$CONFIG_FILE" && list_projects 2>/dev/null | tr '\n' ' ')"
    cat <<EOF
使用方式: $0 <command> [options]

Commands:
    status              查看系統狀態
    start <project>     啟動指定專案
                        可用專案: ${available_projects}
    stop                停止當前專案
    reset               重置當前專案（清除進度，重新開始）
    run                 立即執行一次（不等 cron）
    logs [type]         查看 logs
                        type: latest (預設), master, cron, list
    install-cron        安裝 cron job
    uninstall-cron      移除 cron job
    help                顯示此說明

範例:
    $0 status                   # 查看狀態
    $0 start wedding            # 啟動婚禮 APP 專案
    $0 logs latest              # 查看最新 log
    $0 run                      # 立即執行一次
    $0 stop                     # 停止當前專案

環境變數:
    可在 project-configs.sh 中自訂各專案的配置
EOF
}

install_cron_job() {
    bash "$SCRIPT_DIR/install-cron.sh"
}

uninstall_cron_job() {
    if crontab -l 2>/dev/null | grep -q "$MAIN_SCRIPT"; then
        crontab -l 2>/dev/null | grep -v "$MAIN_SCRIPT" | crontab -
        echo -e "${GREEN}✓ Cron job 已移除${NC}"
    else
        echo -e "${YELLOW}Cron job 未安裝${NC}"
    fi
}

# ============================================
# 主程式
# ============================================

main() {
    print_header
    
    local command=${1:-help}
    
    case "$command" in
        status)
            check_status
            ;;
        start)
            start_project "$2"
            ;;
        stop)
            stop_project
            ;;
        reset)
            reset_project
            ;;
        run)
            run_now
            ;;
        logs)
            view_logs "$2"
            ;;
        install-cron)
            install_cron_job
            ;;
        uninstall-cron)
            uninstall_cron_job
            ;;
        help|--help|-h)
            show_help
            ;;
        *)
            echo -e "${RED}未知的命令: $command${NC}"
            echo ""
            show_help
            exit 1
            ;;
    esac
}

main "$@"
