#!/usr/bin/env python3
# -*- coding: utf-8 -*
# Created by dmitrii at 04.01.2025

from dataclasses import dataclass
import pandas as pd
from sklearn.base import BaseEstimator, TransformerMixin


@dataclass
class SortByTime(BaseEstimator, TransformerMixin):
    """
    Трансформер для сортировки DataFrame по временной колонке.

    Parameters
    ----------
    time_col : str, по умолчанию 'time'
        Название столбца, содержащего временные метки для сортировки.

    Methods
    -------
    fit(X, y=None)
        Не используется, возвращает self.
    
    transform(X)
        Сортирует DataFrame по указанной временной колонке.

    Notes
    -----
    Для приведения значений столбца со времененм к datetime используйте
    трансформер ToDatetime.

    Examples
    --------
    >>> data = {
    ...     'time': [
    ...         '2025-10-01 12:10:10.0',
    ...         '2025-01-01 10:10:10.0'
    ...     ]
    ... }
    >>> df = pd.DataFrame(data)
    >>> transformer = SortByTime(time_col='time')
    >>> result_df = transformer.transform(df)
    >>> print(result_df.to_string(index=False))
                     time
    2025-01-01 10:10:10.0
    2025-10-01 12:10:10.0
    """

    time_col: str = 'time'

    def fit(self, X: pd.DataFrame, y=None):
        return self

    def transform(self, X: pd.DataFrame) -> pd.DataFrame:
        return X.sort_values(self.time_col).copy()


if __name__ == "__main__":
    data = {
        'time': ['2025-10-01 12:13:14.3456',
                 '2025-01-01 10:11:12.1234',
                 '2025-04-01 10:11:12.2345'],
        'tte': [5.0, 3.0, 4.0]
    }
    df = pd.DataFrame(data)
    transformer = SortByTime(time_col='time')
    result_df = transformer.transform(df)
    print(result_df)

