ActiveAdmin.register_page "Ahoy Dashboard" do
  menu label: "总览", parent: "数据统计", priority: 1
  page_action :toggle_city_status, method: :post do
    city = City.find(params[:city_id])
    city.update(active: !city.active)
    redirect_back(fallback_location: admin_dashboard_path, notice: "城市状态已更新")
  end

  content title: "总览" do
    columns do
      column do
        panel "访问统计" do
          para "总访问量: #{Ahoy::Visit.count}"
          para "总事件数: #{Ahoy::Event.count}"
          para "独立访客数: #{Ahoy::Visit.distinct.count(:visitor_token)}"
          para "已激活城市数: #{City.active.count}"
          para "未激活城市数: #{City.inactive.count}"
        end
      end

      column do
        panel "热门城市" do
          table_for City.by_popularity.limit(10) do
            column("城市") { |city| link_to(city.name, admin_city_path(city)) }
            column("访问量") { |city| city.view_count }
          end
        end
      end

      column do
        panel "热门天气艺术" do
          table_for WeatherArt.by_popularity.limit(10) do
            column("作品") { |art| link_to(art.to_s, admin_weather_art_path(art)) }
            column("访问量") { |art| art.view_count }
          end
        end
      end
    end

    columns do
      column do
        panel "今日热门城市" do
          table_for City.by_popularity(:day, 10) do
            column("城市") { |city| link_to(city.name, admin_city_path(city)) }
            column("访问量") { |city| city.view_count }
          end
        end
      end
      column do
        panel "本周热门城市" do
          table_for City.by_popularity(:week, 10) do
            column("城市") { |city| link_to(city.name, admin_city_path(city)) }
            column("访问量") { |city| city.view_count }
          end
        end
      end
      column do
        panel "月度热门城市" do
          table_for City.by_popularity(:month, 10) do
            column("城市") { |city| link_to(city.name, admin_city_path(city)) }
            column("访问量") { |city| city.view_count }
          end
        end
      end
      column do
        panel "年度热门城市" do
          table_for City.by_popularity(:year, 10) do
            column("城市") { |city| link_to(city.name, admin_city_path(city)) }
            column("访问量") { |city| city.view_count }
          end
        end
      end
    end

    columns do
      column do
        panel "最冷门活跃城市" do
          # table_for City.least_popular_active.limit(10) do
          table_for City.least_popular_active.limit(100) do
            column("ID") { |city| city.id }
            column("城市") { |city| link_to(city.name, admin_city_path(city)) }
            column("访问(DWMY)") { |city| "#{city.view_count(:day)}/#{city.view_count(:week)}/#{city.view_count(:month)}/#{city.view_count(:year)}" }
            column("状态") { |city| status_tag(city.active? ? "活跃" : "停用") }
            column("所属区域") { |city| city&.country&.name.to_s+"/"+city&.country&.region&.name.to_s }
            column("图像个数") { |city| city.weather_arts.count }
            column("最后更新时间") { |city| city.last_weather_fetch }
            # column("状态") { |city| status_tag(city.active? ? "活跃" : "停用") }
            column("操作") { |city|
              button_to "停用",
                        admin_ahoy_dashboard_toggle_city_status_path(city_id: city.id),
                        method: :post,
                        data: { confirm: "确定要停用 #{city.name} 吗?" }
            }
          end
        end
      end

      column do
        panel "热门未活跃城市" do
          # table_for City.most_popular_inactive.limit(10) do
          table_for City.most_popular_inactive(100) do
            column("ID") { |city| city.id }
            column("城市") { |city| link_to(city.name, admin_city_path(city)) }
            column("访问(DWMY)") { |city| "#{city.view_count(:day)}/#{city.view_count(:week)}/#{city.view_count(:month)}/#{city.view_count(:year)}" }
            column("状态") { |city| status_tag(city.active? ? "活跃" : "停用") }
            column("所属区域") { |city| city&.country&.name.to_s+"/"+city.country&.region&.name.to_s }
            column("图像个数") { |city| city.weather_arts.count }
            column("最后更新时间") { |city| city.last_weather_fetch }
            column("操作") { |city|
              button_to "激活",
                        admin_ahoy_dashboard_toggle_city_status_path(city_id: city.id),
                        method: :post,
                        data: { confirm: "确定要激活 #{city.name} 吗?" }
            }
          end
        end
      end
    end

    # columns do
    #   column do
    #     panel "城市排名" do
    #       table_for City.by_popularity do
    #         column("城市") { |city| link_to(city.name, admin_city_path(city)) }
    #         column("访问量") { |city| city.view_count }
    #         column("状态") { |city| status_tag(city.active? ? "活跃" : "停用") }
    #         # column("状态") { |city| status_tag(city.active? ? "活跃" : "停用") }
    #         column("操作") { |city|
    #           if city.active?
    #             button_to "停用",
    #                       admin_ahoy_dashboard_toggle_city_status_path(city_id: city.id),
    #                       method: :post,
    #                       data: { confirm: "确定要停用 #{city.name} 吗?" }
    #           else
    #             button_to "激活",
    #                       admin_ahoy_dashboard_toggle_city_status_path(city_id: city.id),
    #                       method: :post,
    #                       data: { confirm: "确定要激活 #{city.name} 吗?" }
    #           end
    #         }
    #       end
    #     end
    #   end
    # end

    # 添加一个事件列表面板
    panel "最近事件" do
      table_for Ahoy::Event.order(time: :desc).limit(10) do
        column :time
        column :name
        column :properties
      end
    end
  end
end