from datetime import datetime, timedelta
from typing import TYPE_CHECKING

from . import db

if TYPE_CHECKING:
    from .VideoClip import VideoClip
    from .VideoPart import VideoPart


class Workflow(db.Model):
    video_clips: list["VideoClip"]
    video_parts: list["VideoPart"]

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(255), nullable=False)
    state = db.Column(db.SmallInteger, nullable=False, default=0)
    """0未开始,1弹幕处理,2完成,3弹幕压制,4完成,5切割视频,6完成,9全部完成"""
    create_time = db.Column(db.DateTime, nullable=False, default=datetime.now)
    update_time = db.Column(db.DateTime, nullable=False, default=datetime.now, onupdate=datetime.now)
    automatic = db.Column(db.Boolean, default=False, nullable=False)
    editing = db.Column(db.Boolean, default=True, nullable=False)
    start_after_time = db.Column(db.DateTime, default=None)

    def calculate_start_time(self):
        if self.editing:
            self.start_after_time = None
        if not self.automatic:
            self.start_after_time = self.start_after_time
        else:
            self.start_after_time = datetime.now() + timedelta(minutes=30)

    def to_dict(self):
        return {
            "id": self.id,
            "name": self.name,
            "state": self.state,
            "create_time": self.create_time.strftime("%Y/%m/%d %H:%M:%S") if self.create_time else None,
            "update_time": self.update_time.strftime("%Y/%m/%d %H:%M:%S") if self.update_time else None,
            "automatic": self.automatic,
            "editing": self.editing,
            "start_after_time": self.start_after_time.strftime("%Y/%m/%d %H:%M:%S") if self.start_after_time else None,
            "video_clips": [i.to_json() for i in self.video_clips],
        }