from datetime import timezone
import pymysql
import json
import os

from utils.logger import *
from utils.config import *
from utils.ClickHouseManager import ClickHouseManager


class StaticMethod:
    @staticmethod
    def take_migration_time(token):
        """
        Получает время начала миграции токена из базы данных ClickHouse.
        :param token: Хеш токена.
        :return: Время в формате Unix timestamp или None.
        """
        try:
            # Initialize ClickHouse manager with tokens_info database
            ch_manager = ClickHouseManager(database="tokens_info")
            
            # Query the tokens table for migration time
            query = "SELECT migrated FROM tokens WHERE token_address = %(token_address)s LIMIT 1"
            result = ch_manager.execute_query(query, {'token_address': token})
            
            if result and result[0][0]:
                # migrated field contains Unix timestamp
                return int(result[0][0])
            return None

        except Exception as e:
            app_logger.error(f"[take_migration_time] Ошибка при получении времени миграции: {e}")
            return None

    @staticmethod
    def save_to_file(data, path):
        """
        Сохраняет данные в указанный JSON-файл.
        :param data: Список словарей или данных.
        :param path: Путь для сохранения файла.
        """
        if not data:
            app_logger.warning("[save_to_file] Нет данных для сохранения.")
            return

        try:
            os.makedirs(os.path.dirname(path), exist_ok=True)
            with open(path, "w", encoding="utf-8") as f:
                json.dump(data, f, ensure_ascii=False, indent=2)
            app_logger.info(f"[save_to_file] Сохранено в файл: {path}")
        except Exception as e:
            app_logger.error(f"[save_to_file] Ошибка при сохранении файла: {e}")

    @staticmethod
    def load_from_file(file_path):
        """
        Загружает данные из JSON-файла.
        :param file_path: Путь к файлу.
        :return: Объект Python (list или dict) или None.
        """
        if not os.path.exists(file_path):
            app_logger.error(f"[load_from_file] Файл не найден: {file_path}")
            return None

        try:
            with open(file_path, "r", encoding="utf-8") as f:
                return json.load(f)
        except Exception as e:
            app_logger.error(f"[load_from_file] Ошибка при чтении файла: {e}")
            return None