﻿import streamlit as st
import os
import json
import random
import time
import uuid
from datetime import datetime, timedelta
import extra_streamlit_components as stx

# ==========================================
# ГЛОБАЛЬНАЯ ЗОНА (БИЗНЕС-ЛОГИКА И КОНСТАНТЫ)
# ==========================================

DIR_PATH = os.path.dirname(__file__)
PREDICTIONS_FILE = os.path.join(DIR_PATH, "predictions.json")
SETTINGS_FILE = os.path.join(DIR_PATH, "settings.json")

def init_files():
    """Создает файлы настроек и предсказаний, если они отсутствуют."""
    if not os.path.exists(PREDICTIONS_FILE):
        # Если файла нет, создаем базовый (с вашими шутками)
        with open(PREDICTIONS_FILE, "w", encoding="utf-8") as f:
            json.dump(["Сегодня вас ждет отличный день!"], f, ensure_ascii=False, indent=4)
            
    if not os.path.exists(SETTINGS_FILE):
        with open(SETTINGS_FILE, "w", encoding="utf-8") as f:
            json.dump({}, f, ensure_ascii=False, indent=4)

def load_predictions():
    with open(PREDICTIONS_FILE, "r", encoding="utf-8") as f:
        return json.load(f)

def load_settings():
    with open(SETTINGS_FILE, "r", encoding="utf-8") as f:
        return json.load(f)

def save_settings(data):
    with open(SETTINGS_FILE, "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False, indent=4)

def get_current_date():
    return datetime.now().strftime("%Y-%m-%d")

# ==========================================
# ТОЧКА ВХОДА (ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС)
# ==========================================

def run(plugin_info):
    init_files()
    
    # Инициализируем менеджер куки для текущей сессии
    cookie_manager = stx.CookieManager(key="predictor_cookie_manager")
    
    with st.container(border=True):
        st.write(f"### {plugin_info.get('icon', '🔮')} {plugin_info.get('title', 'Предсказатор')}")
        st.write(plugin_info.get("full_description", ""))
        st.write("---")
        
        # 1. Пытаемся получить уникальный ID из браузера пользователя
        client_id = cookie_manager.get(cookie="predictor_uid")
        
        # 2. Если куки нет (человек зашел первый раз или с нового телефона)
        if not client_id:
            # Генерируем новый ID
            client_id = f"user_{uuid.uuid4().hex[:12]}"
            # Сохраняем его в браузер пользователя на целый год
            expire_date = datetime.now() + timedelta(days=365)
            cookie_manager.set("predictor_uid", client_id, expires_at=expire_date)
            
        settings = load_settings()
        today = get_current_date()
        
        # Проверяем базу данных по этому client_id
        user_record = settings.get(client_id)
        already_received = bool(user_record and user_record.get("date") == today)
        
        if already_received:
            st.warning("⚠️ Звезды говорят с нами лишь раз в сутки! Вы уже получили свое предсказание на сегодня:")
            st.info(f"### 🔮 {user_record.get('prediction', '')}")
            st.caption("Возвращайтесь завтра за новым предсказанием.")
        else:
            if st.button("✨ Получить предсказание ✨", use_container_width=True):
                with st.spinner("Слушаем шепот звезд... Настраиваемся на вашу ауру..."):
                    time.sleep(2.5)
                
                predictions_list = load_predictions()
                chosen_prediction = random.choice(predictions_list)
                
                # Записываем результат в базу с привязкой к браузеру
                settings[client_id] = {
                    "date": today,
                    "prediction": chosen_prediction
                }
                save_settings(settings)
                
                st.balloons()
                st.success("🌟 **Ваше предсказание на сегодня:**")
                st.info(f"### 🔮 {chosen_prediction}")
                
                # Перезагружаем интерфейс, чтобы скрыть кнопку
                st.rerun()