import telebot
from gradio_client import Client
import sqlite3
from datetime import datetime
import random

# Создание клиента Gradio
client = Client("yuntian-deng/ChatGPT")

# Создание Telegram-бота
TOKEN = '<TRUFFLEHOG_REDACTED_TELEGRAMBOTTOKEN>'
bot = telebot.TeleBot(TOKEN)

# База данных
db_connection = sqlite3.connect('chatbot.db', check_same_thread=False)
cursor = db_connection.cursor()

# Создание таблиц, если их еще нет
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
    user_id INTEGER PRIMARY KEY,
    username TEXT,
    is_blocked INTEGER DEFAULT 0
)''')

cursor.execute('''
CREATE TABLE IF NOT EXISTS chat_history (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER,
    user_message TEXT,
    bot_response TEXT,
    timestamp DATETIME,
    FOREIGN KEY(user_id) REFERENCES users(user_id)
)''')

db_connection.commit()

# Список администраторов
admins = [1013039772]

# Контекст чата для пользователей
chat_context = {}

# Команда /start
@bot.message_handler(commands=['start'])
def start(message):
    name = message.chat.first_name if message.chat.first_name else "N/A"
    cursor.execute('INSERT OR IGNORE INTO users (user_id, username) VALUES (?, ?)',
                   (message.chat.id, name))
    db_connection.commit()
    bot.reply_to(message, "Привет! Напиши что-нибудь, и я отвечу.")
    print(f"Пользователь добавлен: ID = {message.chat.id}, Name = {name}")  # Диагностика

# Команда для отправки сообщения пользователю
@bot.message_handler(commands=['send_message'])
def send_message(message):
    if message.chat.id in admins:
        parts = message.text.split(maxsplit=2)
        if len(parts) > 2:
            user_id = int(parts[1])
            user_message = parts[2]
            bot.send_message(user_id, f"Администратор: {user_message}")
            bot.reply_to(message, f"Сообщение отправлено пользователю {user_id}.")
        else:
            bot.reply_to(message, "Пожалуйста, укажите ID пользователя и текст сообщения.")
    else:
        bot.reply_to(message, "У вас нет прав для выполнения этой команды.")

# Команда ahelp для получения списка админских команд
@bot.message_handler(commands=['ahelp'])
def admin_help(message):
    if message.chat.id in admins:
        help_text = (
            "/admin_clear [ID] - Очистить память пользователя\n"
            "/list_users - Показать всех пользователей\n"
            "/history [ID] - Показать историю сообщений пользователя\n"
            "/user_stats [ID] - Показать статистику пользователя\n"
            "/allmsg [сообщение] - Отправить сообщение всем пользователям\n"
            "/send_message [ID] [сообщение] - Отправить личное сообщение пользователю\n"
            "/block [ID] - Заблокировать пользователя\n"
            "/unblock [ID] - Разблокировать пользователя\n"
            "/clear_all - Очистить всю историю чата (требуется подтверждение)\n" # Added line
        )
        bot.reply_to(message, help_text)
    else:
        bot.reply_to(message, "У вас нет прав для выполнения этой команды.")

@bot.message_handler(commands=['help'])
def help_command(message):
    help_text = (
        "Список команд:\n"
        "/start - Начать работу с ботом\n"
        "/admin (сообщение ) - обратиться к администратору\n"
        "/help - Показать этот список команд\n"
    )
    bot.reply_to(message, help_text)

# Команда для отправки сообщения всем пользователям
@bot.message_handler(commands=['allmsg'])
def allmsg(message):
    if message.chat.id in admins:
        parts = message.text.split(maxsplit=1)
        if len(parts) > 1:
            admin_message = f"Админ: {parts[1]}"
            cursor.execute('SELECT user_id FROM users')
            users = cursor.fetchall()
            for user in users:
                try:
                    bot.send_message(user[0], admin_message)