class ArtistsController < ApplicationController
  before_action :set_artist, only: %i[ show edit update destroy ]

  # GET /artists or /artists.json
  def index
    artists = Artist.all
    midpoint = (artists.count / 2.0).ceil
    @artistsLeft = Artist.limit(midpoint)
    @artistsRight = Artist.limit(artists.count).offset(midpoint)
  end

  # GET /artists/1 or /artists/1.json
  def show
    grabados_per_page = 10.0
    # Pagina en la que estan
    if !params[:page].nil?
      @page = params[:page].to_i
    else
      @page = 1
    end
    # Calculamos las páginas para todos y solo para los disponibles
    # TODOS
    pages_all = Array.new
    @artist.collections.order(:id).each do |c|
      grabados = Grabado.where(collection: c, artist: @artist)
      if c.grabados.count > grabados_per_page
        (grabados.count / grabados_per_page).ceil.times do |t|
          pages_all << grabados.limit(grabados_per_page).offset(t*grabados_per_page)
        end
      else
        pages_all << grabados
      end
    end
    # DISPONIBLES
    pages_available = Array.new
    @artist.collections.order(:id).each do |c|
      grabados = Grabado.where(collection: c, artist: @artist, state: ["Disponible","Consultar existencias"])
      if c.grabados.count > grabados_per_page
        (grabados.count / grabados_per_page).ceil.times do |t|
          pages_available << grabados.limit(grabados_per_page).offset(t*grabados_per_page)
        end
      else
        pages_available << grabados
      end
    end

    # Comprobamos si ha cambiado que grabados se muestran, todos o solo los disponibles
    # y reajustamos la pagina que se muestra si es necesario.
    if !params[:available].eql? session[:available] and !params[:available].nil?
      # Si el numero de paginas cambia porque alguna desaparece al poner solo los disponibles,
      # comprobamos si se ha cambiado de disponibles a todos o al revés y recalculamos la pagina.
      if !pages_all.count.eql? pages_available.count
        if session[:available].eql? 'todos'
          # cambiamos de todos a availables
          pages_from = pages_all
          pages_to   = pages_available
        else
          pages_to   = pages_all
          pages_from = pages_available
        end
        grabado = pages_from[@page-1].first
        pages_to.count.times do |t|
          @page = t+1 if pages_to[t].include? grabado
        end
      end
      session[:available] = params[:available]
    elsif session[:available].nil?
      # Si la variable de sesion está vacia mostramos todos los grabados.
      session[:available] = 'todos'
    end

    if session[:available].eql?  'disponibles'
      # Show only available ones.
      @pages = pages_available
    else
      #show all.
      @pages = pages_all
    end
  end

  ## GET /artists/new
  #def new
  #  @artist = Artist.new
  #end

  ## GET /artists/1/edit
  #def edit
  #end

  ## POST /artists or /artists.json
  #def create
  #  @artist = Artist.new(artist_params)

  #  respond_to do |format|
  #    if @artist.save
  #      format.html { redirect_to artist_url(@artist), notice: "Artist was successfully created." }
  #      format.json { render :show, status: :created, location: @artist }
  #    else
  #      format.html { render :new, status: :unprocessable_entity }
  #      format.json { render json: @artist.errors, status: :unprocessable_entity }
  #    end
  #  end
  #end

  ## PATCH/PUT /artists/1 or /artists/1.json
  #def update
  #  respond_to do |format|
  #    if @artist.update(artist_params)
  #      format.html { redirect_to artist_url(@artist), notice: "Artist was successfully updated." }
  #      format.json { render :show, status: :ok, location: @artist }
  #    else
  #      format.html { render :edit, status: :unprocessable_entity }
  #      format.json { render json: @artist.errors, status: :unprocessable_entity }
  #    end
  #  end
  #end

  ## DELETE /artists/1 or /artists/1.json
  #def destroy
  #  @artist.destroy

  #  respond_to do |format|
  #    format.html { redirect_to artists_url, notice: "Artist was successfully destroyed." }
  #    format.json { head :no_content }
  #  end
  #end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_artist
      #@artist = Artist.find(params[:id])
      @artist = Artist.friendly.find(params[:artist_slug])
    end

    # Only allow a list of trusted parameters through.
    def artist_params
      params.require(:artist).permit(:name, :lastname)
    end
end
