# -*- coding:utf-8 -*-
"""
@author: yq
@time: 2023/12/28
@desc:  各种工具类
"""

import datetime
import inspect
import os
from json import JSONEncoder

import dataframe_image as dfi
import pandas as pd
import pytz

from config import BaseConfig


def f_format_float(num: float, n=3):
    return f"{num: .{n}f}"


def f_get_date(offset: int = 0, connect: str = "-") -> str:
    current_date = datetime.datetime.now(pytz.timezone("Asia/Shanghai")).date() + datetime.timedelta(days=offset)
    return current_date.strftime(f"%Y{connect}%m{connect}%d")


def f_get_datetime(offset: int = 0, connect: str = "_") -> str:
    current_date = datetime.datetime.now(pytz.timezone("Asia/Shanghai")) + datetime.timedelta(days=offset)
    return current_date.strftime(f"%Y{connect}%m{connect}%d{connect}%H{connect}%M{connect}%S")


def f_get_clazz_in_module(module):
    """
    获取包下的所有类
    """
    classes = []
    for name, member in inspect.getmembers(module):
        if inspect.isclass(member):
            classes.append(member)
    return classes


def f_save_train_df(file_name: str, df: pd.DataFrame):
    file_path = os.path.join(BaseConfig.train_path, file_name)
    df.to_excel(f"{file_path}.xlsx", index=False)


def f_df_to_image(df, filename, fontsize=12):
    dfi.export(obj=df, filename=filename, fontsize=fontsize, table_conversion='matplotlib')


class f_clazz_to_json(JSONEncoder):
    def default(self, o):
        return o.__dict__