from sqlalchemy.orm import Session
from typing import Annotated, Union
from fastapi import Depends
from . import models, schemas, utils
import random
import datetime

# Загружаем стихи
def add_poems_to_db(db: Session):
    f1 = open('text121.txt', encoding='utf-8', mode='r')#открыть фаил для чтения на русском
    for a in range(1, 110):
        f1.seek(0)#перейти к началу
        i=0
        str1 = ""
        stixi = ""
        author = ""
        flag = False
        while str1 != f"стих {a}\n":
            str1=f1.readline()
        name=f1.readline()
        # Цикл для склеивания стихотворения
        while str1 != f"стих {a+1}\n":
            str1=f1.readline()
            if str1 != f"стих {a + 1}\n":
              if (str1 != f"Автор:\n" and flag == False):
                  stixi += str1  # удаление /n и заключение в список
              else:
                  if str1 == f"Автор:\n":#чтобы не записывать слово "автор"
                      flag = True
                  else:
                      author += str1
        poem = models.Poems(title=name, text=stixi, author=author)
        # В конце каждой итерации добавляем в базу данных
        db.add(poem)
        db.commit()
        db.refresh(poem)
    # close the file
    f1.close()
   

def generate_poem(db: Session):
    # генерируем 1 случайное id и выбираем объект бд с этим id
    rand_id = random.randint(1, 102)
    poem = db.query(models.Poems).filter(models.Poems.id == rand_id).first()
    # возвращаем название и текст стихотворения
    return {"name": poem.title, "text": poem.poem_text, "author":""} # добавить поле author в Poems
#Вова тестирует получение поэм, Димоны, помогите пж
# def poems_to_front(db: Annotated[Session, Depends(utils.get_db)]):
#     kolvo_stixov = 109  # пока количество стихотворений = 101
#     rand_id = random.randint(1, kolvo_stixov)  # номер стихотворения
#     poem_json = dict()
#     poem = database.query(models.Poems).filter(models.Poems.id == rand_id).first()
#     poem_json = {"title": poem.title, "text": poem.text, "author":poem.author}
#     return poem_json



def get_query_results(schema: schemas.SortAnnouncements, db: Annotated[Session, Depends(utils.get_db)]):
    """Функция для последовательного применения различных фильтров (через схему SortAnnouncements)"""
    res = db.query(models.Announcement)
    fields = schema.__dict__ # параметры передоваемой схемы SortAnnouncements (ключи и значения)
    for name, filt in fields.items():
        if filt is not None:
            d = {name: filt}
            res = res.filter_by(**d)
    return res.all()


def check_obsolete(db: Annotated[Session, Depends(utils.get_db)], current_date: datetime.date):
    """
    Обновляем поле obsolete у всех объявлений раз в сутки
    """
    announcements = db.query(models.Announcement).all()
    for ann in announcements:
        if ann.best_by < current_date:
            ann.obsolete = True
            db.commit()
            db.refresh(ann)  # обновляем состояние объекта