# -------------------------------------------------------------------------
#  This file is part of the MindStudio project.
# Copyright (c) 2025 Huawei Technologies Co.,Ltd.
#
# MindStudio is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#
#          http://license.coscl.org.cn/MulanPSL2
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
# -------------------------------------------------------------------------

from datetime import datetime

import pytz
from sqlalchemy import Column, Integer, DateTime
from sqlalchemy.orm import declarative_base

Base = declarative_base()


def get_current_time():
    return datetime.now(pytz.timezone('Asia/Shanghai'))


class BaseDb(Base):
    __abstract__ = True

    id = Column(Integer, primary_key=True, autoincrement=True)  # 主键
    created_time = Column(
        DateTime(timezone=True),
    )
    updated_time = Column(
        DateTime(timezone=True),
        onupdate=get_current_time
    )

    def __init__(self, **kwargs):
        now = get_current_time()
        kwargs.setdefault("created_time", now)
        kwargs.setdefault("updated_time", now)
        super().__init__(**kwargs)