import logging
import sqlite3
import json
import os
from datetime import datetime
from aiogram import Bot
from db import DATA_DB

logger = logging.getLogger(__name__)

# Путь к файлу с ID админ чата
ADMIN_CHAT_FILE = "admin_chat.json"

def get_admin_chat_id() -> int | None:
    """
    Получает ID админ чата из JSON файла
    """
    try:
        if os.path.exists(ADMIN_CHAT_FILE):
            with open(ADMIN_CHAT_FILE, 'r', encoding='utf-8') as f:
                data = json.load(f)
                return data.get('admin_chat_id')
        else:
            # Создаем файл с дефолтным значением если его нет
            default_data = {"admin_chat_id": -5022042740}
            with open(ADMIN_CHAT_FILE, 'w', encoding='utf-8') as f:
                json.dump(default_data, f, ensure_ascii=False, indent=4)
            return -5022042740
    except Exception as e:
        logger.error(f"Error reading admin chat ID from {ADMIN_CHAT_FILE}: {e}")
        return None

async def save_order(state_data: dict, user_id: int, payment_method: str, bot: Bot) -> bool:
    """
    Сохраняет заказ в базу данных и отправляет уведомление админу
    """
    try:
        # Получаем данные из состояния
        product_id = state_data.get('product_id')
        city_id = state_data.get('city_id')
        tag_index = state_data.get('tag_index')
        tag_name = state_data.get('tag_name')
        district = state_data.get('district')
        base_price = state_data.get('product_base_price')
        
        # Получаем дополнительную информацию из базы данных
        conn = sqlite3.connect(DATA_DB)
        cur = conn.cursor()
        
        # Получаем название товара
        cur.execute("SELECT product_name FROM products WHERE product_id = ?", (product_id,))
        product_row = cur.fetchone()
        product_name = str(product_row[0]).strip() if product_row and product_row[0] else "Неизвестный товар"
        
        # Получаем название города
        cur.execute("SELECT city_name FROM city WHERE city_id = ?", (city_id,))
        city_row = cur.fetchone()
        city_name = str(city_row[0]).strip() if city_row and city_row[0] else "Неизвестный город"
        
        # Получаем текущую дату и время
        now = datetime.now()
        order_date = now.strftime("%Y-%m-%d")
        order_time = now.strftime("%H:%M:%S")
        
        # Сохраняем заказ в таблицу orders с правильной структурой
        cur.execute('''
            INSERT INTO orders (
                product_id, price_order, payment_method, delivery_adress, 
                order_status, order_user_id, order_manager_id, order_date, order_time, tip_delivery
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        ''', (
            product_id, base_price, payment_method, district,
            'load', user_id, None, order_date, order_time, 'самовывоз'
        ))
        
        order_id = cur.lastrowid
        
        conn.commit()
        conn.close()
        
        print(f"Order saved successfully: ID {order_id}")
        
        # Отправляем уведомление админу
        await send_admin_notification(bot, {
            'order_id': order_id,
            'user_id': user_id,
            'city_name': city_name,
            'district': district,
            'product_name': product_name,
            'product_id': product_id,
            'payment_method': payment_method,
            'price': base_price,
            'tag_name': tag_name,
            'order_date': order_date,
            'order_time': order_time
        })
        
        return True
        
    except Exception as e:
        logger.error(f"Error saving order for user {user_id}: {e}")
        return False

async def send_admin_notification(bot: Bot, order_data: dict):
    """
    Отправляет уведомление админу о новом заказе
    """
    try:
        # Получаем ID админ чата из JSON файла
        ADMIN_CHAT_ID = get_admin_chat_id()
        
        # Получаем информацию о пользователе из базы данных
        conn = sqlite3.connect(DATA_DB)
        cur = conn.cursor()
        cur.execute("SELECT first_name, username FROM users WHERE user_id = ?", (order_data['user_id'],))
        user_row = cur.fetchone()
        conn.close()
        
        first_name = user_row[0] if user_row and user_row[0] else "Не указано"
        username = user_row[1] if user_row and user_row[1] else "Не указан"
        
        # Определяем тип оплаты для красивого отображения
        payment_method = order_data['payment_method']
        if payment_method == "button14":
            payment_display = "Банковская карта"
        elif payment_method == "button16":
            payment_display = "Со своего баланса"
        elif payment_method == "cryptobot":
            payment_display = "CryptoBot"
        elif payment_method == "operator_wallet":
            payment_display = "Кошелек оператора"
        else:
            payment_display = payment_method  # Оставляем оригинальное значение, если не распознано
        
        message_text = f"""
📦 Поступил новый заказ
Войдите в раздел заказы в админ панели.

🆔 ID заказа: {order_data['order_id']}
🏙️ Город: {order_data['city_name']}
📍 Район: {order_data['district']}
📦 Товар: {order_data['product_name']} (ID: {order_data['product_id']})
💰 Вариант: {order_data['tag_name']}
💳 Тип оплаты: {payment_display}
💵 Цена: {order_data['price']} $

👤 ID пользователя: {order_data['user_id']}
👤 Имя: {first_name}
👤 Username: @{username}

📅 Дата: {order_data['order_date']}
⏰ Время: {order_data['order_time']}
🚚 Тип доставки: самовывоз
        """.strip()
        
        # Если указан реальный ADMIN_CHAT_ID, отправляем сообщение
        if ADMIN_CHAT_ID:
            await bot.send_message(ADMIN_CHAT_ID, message_text)
            print(f"Admin notification sent to chat {ADMIN_CHAT_ID}")
        else:
            # Иначе логируем
            print("ADMIN NOTIFICATION (no ADMIN_CHAT_ID specified):")
            print(message_text)
            
    except Exception as e:
        logger.error(f"Error sending admin notification: {e}")
        print(f"Error sending admin notification: {e}")