import json
from datetime import datetime, timezone
import pytz

class DashboardService:
    def __init__(self, assignment_service, submission_service):
        self.assignment_service = assignment_service
        self.submission_service = submission_service

    def get_dashboard_data(self, user_id):
        assignments = self.assignment_service.get_user_assignments(user_id)
        dashboard_data = []

        for assignment_id, assignment_info in assignments.items():
            assignment_data = self.assignment_service.get_assignment(assignment_id)
            submission_ids = assignment_data.get("submission_ids", [])
            submission_count = len(submission_ids)

            dashboard_item = {
                # "assignment_id": assignment_id,
                "作業題目": assignment_data["metadata"]["topic"],
                "類型": assignment_data["assignment_type"],
                "回傳數量": submission_count,
                "建立時間": assignment_data["timestamp"],
                "截止時間": assignment_data["metadata"].get("submission_deadline")
            }
            dashboard_data.append(dashboard_item)

        # 按創建日期降序排序
        dashboard_data.sort(key=lambda x: x["建立時間"], reverse=True)
        return dashboard_data

    def get_assignment_details(self, assignment_id):
        assignment_data = self.assignment_service.get_assignment(assignment_id)
        submission_ids = assignment_data.get("submission_ids", [])
        submissions = []

        for submission_id in submission_ids:
            submission_data = self.submission_service.get_submission_from_gcs(submission_id)
            if submission_data:
                submissions.append({
                    "submission_id": submission_id,
                    "student_id": submission_data["student_id"],
                    "student_email": submission_data.get("student_email", "未提供"),
                    "student_name": submission_data["student_name"],
                    "submission_date": submission_data["timestamp"]
                })

        return {
            "assignment_data": assignment_data,
            "submissions": submissions
        }

    def get_submission_details(self, submission_id):
        submission_data = self.submission_service.get_submission_from_gcs(submission_id)
        if not submission_data:
            return {"error": "找不到提交記錄"}

        assignment_data = self.assignment_service.get_assignment(submission_data["assignment_id"])
        return {
            "submission_data": submission_data,
            "assignment_data": assignment_data
        }

    def get_all_submissions(self, user_id):
        assignments = self.assignment_service.get_user_assignments(user_id)
        all_submissions = []

        for assignment_id, assignment_info in assignments.items():
            assignment_data = self.assignment_service.get_assignment(assignment_id)
            submission_ids = assignment_data.get("submission_ids", [])

            for submission_id in submission_ids:
                submission_data = self.submission_service.get_submission_from_gcs(submission_id)
                if submission_data:
                    score = self.extract_score(submission_data)
                    all_submissions.append({
                        "作業名稱": assignment_data["metadata"]["topic"],
                        "作業類型": assignment_data["assignment_type"],
                        # "學生_id": submission_data["student_id"],
                        "學生Email": submission_data.get("student_email", "未提供"),
                        "學生姓名": submission_data["student_name"],
                        "繳交日期": submission_data["timestamp"],
                        "分數": score
                    })

        all_submissions.sort(key=lambda x: x["繳交日期"], reverse=True)
        return all_submissions

    def extract_score(self, submission_data):
        try:
            content = submission_data.get("submission_data", {})
            if isinstance(content, str):
                content = json.loads(content)
            
            if not isinstance(content, dict):
                print(f"內容格式不正確:{type(content)}")
                return "N/A"
            
            content = content.get("content", {})
            if isinstance(content, str):
                content = json.loads(content)
            
            output_tables = content.get("chinese_full_paragraph_refine_output_table", [])
            print(f"output_tables: {output_tables}")  # 調試輸出
            last_score = "N/A"
            
            # 只取最後一個「綜合評分」
            for table in reversed(output_tables):
                print(f"檢查 table: {table}")  # 調試輸出
                if isinstance(table, str):
                    try:
                        table = json.loads(table)
                    except json.JSONDecodeError:
                        continue
                if isinstance(table, dict) and table.get("架構") == "綜合評分":
                    last_score = table.get("評分", "N/A")
                    print(f"找到最後的評分: {last_score}")  # 調試輸出
                    break
            
            return last_score
            
        except json.JSONDecodeError as e:
            print(f"JSON 解析錯誤:{str(e)}")
        except Exception as e:
            print(f"提取分數時出錯:{str(e)}")
        
        print(f"提交數據:{submission_data}")
        return "N/A"