from flask import Flask, render_template, request
import random

app = Flask(__name__)

# Український алфавіт
UKRAINIAN_ALPHABET = list('АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ')

# Список слів для автоматичної генерації
WORD_LIST = [
    "МАМА", "ТАТО", "КІТ", "ЛІС", "М'ЯЧ", "ДІМ", "САД", "РИБА",
    "СОНЦЕ", "КНИГА", "СТІЛ", "СТІЛЕЦЬ", "КАША", "СІЛЬ", "МОЛОКО",
    "ХЛІБ", "ВОДА", "ГРУША", "ЯБЛУКО", "ЛИСТ", "КВІТКА", "ЗИМА",
    "ВЕСНА", "ЛІТО", "ОСІНЬ", "ДОЩ", "СНІГ", "ВІТЕР", "ХМАРА",
    "ГОРА", "МОРЕ", "КУХНЯ", "СОН", "ШКОЛА", "УЧЕНЬ", "ВЧИТЕЛЬ",
    "КЛАС", "ДРУГ", "КНИЖКА", "ОЛІВЕЦЬ", "РУЧКА", "ПИСЬМО", "СТОРІНКА",
    "МАЛЮНОК", "КОЛІР", "РАДУГА", "МУЗИКА", "ПІСНЯ", "ТАНЕЦЬ", "ФОТО",
    "ФІЛЬМ", "ТЕАТР", "АКТОР", "РОЛЬ", "ГЕРОЙ", "КАЗКА", "ЛІТЕРАТУРА",
    "ІСТОРІЯ", "НАУКА", "ПРИРОДА", "ПТАХ", "ЗВІР", "КОМП'ЮТЕР", "ІНТЕРНЕТ",
    "МАШИНА", "АВТОБУС", "ПОТЯГ", "ЛІТАК", "КОРАБЕЛЬ", "ДОРОГА", "МІСТО",
    "СЕЛО", "ВУЛИЦЯ", "БУДИНОК", "КВАРТИРА", "СІМ'Я", "БАТЬКО", "МАТИ",
    "БРАТ", "СЕСТРА", "ДІДУСЬ", "БАБУСЯ", "ДИТИНА", "ДРУЗІ", "ЛЮБОВ",
    "ЩАСТЯ", "РАДІСТЬ", "МРІЯ", "НАДІЯ", "ВІРА", "ДОБРО", "ДРУЖБА",
    "ПРАВДА", "СВОБОДА", "МИР", "ЖИТТЯ", "ЗДОРОВ'Я", "СИЛА", "ЕНЕРГІЯ",
    "СВІТЛО", "ЗОРЯ", "МІСЯЦЬ", "ПЛАНЕТА", "КОСМОС", "ЗЕМЛЯ", "ГРУНТ",
    "ПОВІТРЯ", "ВОГОНЬ", "РОСЛИНА", "ДЕРЕВО", "ТРАВА", "ОВОЧ", "ФРУКТ",
    "ЯГОДА", "ГРИБ", "КАШТАН", "СТЕП", "ПІСОК", "РІКА", "ОЗЕРО", "ДЖЕРЕЛО",
    "ВОДОСПАД", "КОМАХА", "МЕТЕЛИК", "БДЖОЛА", "СОНЕЧКО"
]


def generate_grid(words, width=12, height=12):
    grid = [['' for _ in range(width)] for _ in range(height)]
    directions = ['horizontal', 'vertical']  # Видалили 'diagonal'

    for word in words:
        word = word.strip().upper()
        placed = False
        attempts = 0

        while not placed and attempts < 100:
            direction = random.choice(directions)
            if direction == 'horizontal':
                row = random.randint(0, height - 1)
                col = random.randint(0, width - len(word))
                if all(grid[row][col + i] in ('', word[i]) for i in range(len(word))):
                    for i in range(len(word)):
                        grid[row][col + i] = word[i]
                    placed = True
            elif direction == 'vertical':
                row = random.randint(0, height - len(word))
                col = random.randint(0, width - 1)
                if all(grid[row + i][col] in ('', word[i]) for i in range(len(word))):
                    for i in range(len(word)):
                        grid[row + i][col] = word[i]
                    placed = True
            attempts += 1

        if not placed:
            print(f"Не вдалося розмістити слово: {word}")

    # Заповнюємо порожні клітинки випадковими українськими літерами
    for i in range(height):
        for j in range(width):
            if grid[i][j] == '':
                grid[i][j] = random.choice(UKRAINIAN_ALPHABET)

    return grid

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        auto_generate = request.form.get('auto_generate')
        if auto_generate == 'on':
            # Автоматична генерація слів
            words = random.sample(WORD_LIST, 5)
        else:
            words_input = request.form['words']
            words = [word.strip().upper() for word in words_input.split(',') if word.strip()]
        grid = generate_grid(words)
        return render_template('start.html', grid=grid, words=words)
    else:
        return render_template('start.html', grid=None, words=None)
        
if __name__ == '__main__':
    app.run(debug=True)
