document.head.insertAdjacentHTML('beforeend','<style type="text/tailwindcss">'+stylFns['app/pages/Events/index.styl']+'</style>')

module.exports =
    name: 'Events'
    render: (new Function '_ctx', '_cache', renderFns['app/pages/Events/index.pug'])()
    data: ->
        allEvents: []
        displayedEvents: []
        loading: false
        currentPage: 1
        pageSize: 9
        eventFilters: [
            {
                key: 'category'
                label: 'Категория'
                type: 'select'
                options: [
                    { value: 'all', label: 'Все категории' }
                    { value: 'classical', label: 'Классическая музыка' }
                    { value: 'folk', label: 'Фольклор' }
                    { value: 'jazz', label: 'Джаз' }
                    { value: 'pop', label: 'Поп-музыка' }
                    { value: 'dance', label: 'Танцевальное шоу' }
                ]
            }
            {
                key: 'venue'
                label: 'Зал'
                type: 'select'
                options: [
                    { value: 'all', label: 'Все залы' }
                    { value: 'Большой зал', label: 'Большой зал' }
                    { value: 'Малый зал', label: 'Малый зал' }
                    { value: 'Камерный зал', label: 'Камерный зал' }
                ]
            }
            {
                key: 'priceRange'
                label: 'Цена'
                type: 'range'
                options: [
                    { value: 'all', label: 'Любая цена' }
                    { value: 'budget', label: 'До 50 сомони' }
                    { value: 'medium', label: '50-100 сомони' }
                    { value: 'premium', label: 'Выше 100 сомони' }
                ]
            }
        ]
        sortOptions: [
            { value: 'date-asc', label: 'По дате (сначала ближайшие)' }
            { value: 'date-desc', label: 'По дате (сначала дальние)' }
            { value: 'price-asc', label: 'По цене (сначала дешевые)' }
            { value: 'price-desc', label: 'По цене (сначала дорогие)' }
            { value: 'name-asc', label: 'По названию (А-Я)' }
            { value: 'name-desc', label: 'По названию (Я-А)' }
        ]
        categoryLabels:
            classical: 'Классика'
            folk: 'Фольклор'
            jazz: 'Джаз'
            pop: 'Поп'
            dance: 'Танцы'

    computed:
        hasMoreEvents: ->
            @currentPage * @pageSize < @allEvents.length

    mounted: ->
        @loadEvents()
        @displayedEvents = @allEvents.slice(0, @pageSize)

    methods:
        loadEvents: ->
            @loading = true
            @allEvents = _.getEvents() || []
            
            if @allEvents.length == 0
                setTimeout =>
                    @loadEvents()
                , 500
            else
                @loading = false

        handleFilterChange: (filteredItems) ->
            @displayedEvents = filteredItems
            @currentPage = 1

        openEventModal: (event) ->
            _.openModal('EventDetailModal', { event: event })

        loadMoreEvents: ->
            @loading = true
            setTimeout =>
                @currentPage += 1
                startIndex = 0
                endIndex = @currentPage * @pageSize
                @displayedEvents = @allEvents.slice(startIndex, endIndex)
                @loading = false
            , 1000

        resetFilters: ->
            @displayedEvents = @allEvents.slice(0, @pageSize)
            @currentPage = 1

        getCategoryLabel: (category) ->
            @categoryLabels[category] || category

        getCategoryBadgeClass: (category) ->
            classes =
                classical: 'bg-blue-500'
                folk: 'bg-green-500'
                jazz: 'bg-purple-500'
                pop: 'bg-pink-500'
                dance: 'bg-orange-500'
            
            classes[category] || 'bg-gray-500'

        formatDate: (dateString) ->
            try
                date = new Date(dateString)
                options = { day: 'numeric', month: 'short' }
                date.toLocaleDateString('ru-RU', options)
            catch
                dateString
