defmodule Web.BlogController do
  use Web, :controller

  def index(conn, params) do
    {:ok, {blogs, meta}} = Core.Posts.list_published_posts(:blog, params)

    blogs_by_year =
      blogs
      |> Enum.group_by(fn blog ->
        date = Core.Posts.publish_date(blog)
        date && date.year
      end)
      |> Enum.sort_by(fn {year, _} -> year end, :desc)

    render(conn, :index, blogs_by_year: blogs_by_year, meta: meta)
  end

  def show(conn, %{"year" => year, "month" => month, "day" => day, "slug" => slug}) do
    with {year, ""} <- Integer.parse(year),
         {month, ""} <- Integer.parse(month),
         {day, ""} <- Integer.parse(day),
         {:ok, publish_date} <- Date.new(year, month, day) do
      blog = Core.Posts.get_published_blog!(publish_date, slug)
      render(conn, :show, blog: blog)
    else
      _ -> raise Ecto.NoResultsError
    end
  end
end