// rdschedcartlist.cpp
//
// A class for handling carts to be used in scheduler
//
//   Copyright (C) 2005 Stefan Gabriel <stg@st-gabriel.de>
//   Copyright (C) 2019 Fred Gleason <fredg@paravelsystems.com>
//
//   This program is free software; you can redistribute it and/or modify
//   it under the terms of the GNU General Public License version 2 as
//   published by the Free Software Foundation.
//
//   This program is distributed in the hope that it will be useful,
//   but WITHOUT ANY WARRANTY; without even the implied warranty of
//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//   GNU General Public License for more details.
//
//   You should have received a copy of the GNU General Public
//   License along with this program; if not, write to the Free Software
//   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//

#include <stdio.h>
#include "rdschedcartlist.h"

RDSchedCartList::RDSchedCartList()
{
}


void RDSchedCartList::insertItem(unsigned cartnumber,int cartlength,int stack_id,
			       const QString &stack_artist,
			       const QString &stack_title,
			       const QStringList &stack_schedcodes)
{
  list_cartnum.push_back(cartnumber);
  list_cartlen.push_back(cartlength);
  list_stackid.push_back(stack_id);
  list_artist.push_back(stack_artist.toLower().replace(" ",""));
  list_title.push_back(stack_title.toLower().replace(" ",""));
  list_schedcodes.push_back(stack_schedcodes);  
}


void RDSchedCartList::removeItem(int itemnumber)
{
  list_cartnum.removeAt(itemnumber);
  list_cartlen.removeAt(itemnumber);
  list_stackid.removeAt(itemnumber);
  list_artist.removeAt(itemnumber);
  list_title.removeAt(itemnumber);
  list_schedcodes.removeAt(itemnumber);
}

bool RDSchedCartList::removeIfCode(int itemnumber,const QString &test_code)
{
  bool matched=false;

  for(int i=list_schedcodes.size()-1;i>=0;i--) {
    if(list_schedcodes.at(i).contains(test_code)) {
      list_cartnum.removeAt(i);
      list_cartlen.removeAt(i);
      list_stackid.removeAt(i);
      list_artist.removeAt(i);
      list_title.removeAt(i);
      list_schedcodes.removeAt(i);
      matched=true;
    }
  }

  return matched;
}

bool RDSchedCartList::itemHasCode(int itemnumber,const QString &test_code)
{
  return list_schedcodes.at(itemnumber).contains(test_code);
}


bool RDSchedCartList::itemHasCodes(int itemnumber,const QStringList &test_codes)
{
  int matches=0;

  for(int i=0;i<test_codes.size();i++) {
    if(itemHasCode(itemnumber,test_codes.at(i))) {
      matches++;
    }
  }
  return(matches==test_codes.size());
}


void RDSchedCartList::save(void)
{
  list_savecartnum=list_cartnum;
  list_savecartlen=list_cartlen;
  list_savestackid=list_stackid;
  list_saveartist=list_artist;
  list_savetitle=list_title;
  list_saveschedcodes=list_schedcodes;
}


void RDSchedCartList::restore(void)
{
  list_cartnum=list_savecartnum;
  list_cartlen=list_savecartlen;
  list_stackid=list_savestackid;
  list_artist=list_saveartist;
  list_title=list_savetitle;
  list_schedcodes=list_saveschedcodes;
}


unsigned RDSchedCartList::getItemCartNumber(int itemnumber)
{
  return list_cartnum.at(itemnumber);
}


int RDSchedCartList::getItemStackid(int itemnumber)
{
  return list_stackid.at(itemnumber);
}


QString RDSchedCartList::getItemArtist(int itemnumber)
{
  return list_artist.at(itemnumber);
}


QString RDSchedCartList::getItemTitle(int itemnumber)
{
  return list_title.at(itemnumber);
}


QStringList RDSchedCartList::getItemSchedCodes(int itemnumber)
{
  return list_schedcodes.at(itemnumber);
}


int RDSchedCartList::getItemCartLength(int itemnumber)
{
  return list_cartlen.at(itemnumber);
}


int RDSchedCartList::getNumberOfItems(void)
{
  return list_cartnum.size();
}