/**
 * SongList.java
 *
 * Caitlin Ross
 * 100735219
 */

import java.util.*;

public class SongList {
	
	private ArrayList<Song> songList;
	private ArrayList<String> songNames;
	private ArrayList<String> artistNames;
	
    public SongList() {
    	songList = new ArrayList<Song>();
    	songNames = new ArrayList<String>();
    	artistNames = new ArrayList<String>();
    }
    
    public ArrayList<Song> getList(){return songList;}
    
    public void addSong(Song aSong){
    	songList.add(aSong);
    	boolean songFlag = true, artistFlag = true;
    	for(int i=0; i<songList.size()-1; i++){
    		if(songList.get(i).getSongTitle().equals(aSong.getSongTitle()))
    			songFlag = false;
    		if(songList.get(i).getArtist().equals(aSong.getArtist()))
    			artistFlag = false;
    	}
    	if(songFlag == true)
    		songNames.add(aSong.getSongTitle());
    	if(artistFlag == true)
    		artistNames.add(aSong.getArtist());
    }
    
    public String[] getArtists(){
    	return convertToArray(artistNames);
    }
    
    public String[] getSongs(){
    	return convertToArray(songNames);
    }
    
    public String[] getSongsByArtist(String anArtist){
    	ArrayList<String> songArray = new ArrayList<String>();
    	boolean flag;
    	
    	for(int i=0; i<songList.size(); i++){
    		if(songList.get(i).getArtist().equals(anArtist)){
    			if(!songArray.contains(songList.get(i).getSongTitle()))
    				songArray.add(songList.get(i).getSongTitle());
    		}	
    	}
    	return convertToArray(songArray);
    }
    
    public String[] getArtistsBySong(String aSong){
    	ArrayList<String> artistArray = new ArrayList<String>();
    	boolean flag;
    	
    	for(int i=0; i<songList.size(); i++){
    		if(songList.get(i).getSongTitle().equals(aSong)){
    			if(!artistArray.contains(songList.get(i).getArtist()))
    				artistArray.add(songList.get(i).getArtist());
    		}	
    	}
    	return convertToArray(artistArray);
    }
    
    public String[] findSongs(String aSearch){
    	ArrayList<String> songArray = new ArrayList<String>();
    	StringMatcher matcher = new StringMatcher();
    	for(int i=0; i<songNames.size(); i++){
    		if(matcher.matches(aSearch, songNames.get(i)))
    			songArray.add(songNames.get(i));
    	}
    	return convertToArray(songArray);
    }
    
    public Song getASong(String songTitle){
    	for(int i=0; i<songList.size(); i++){
    		if(songList.get(i).getSongTitle().equals(songTitle)){
    			return songList.get(i);
    		}
    	}
    	return null;
    }
    
    public String[] findArtists(String aSearch){
    	ArrayList<String> artistArray = new ArrayList<String>();
    	StringMatcher matcher = new StringMatcher();
    	for(int i=0; i<artistNames.size(); i++){
    		if(matcher.matches(aSearch, artistNames.get(i)))
    			artistArray.add(artistNames.get(i));
    	}
    	return convertToArray(artistArray);
    }
    
    private String[] convertToArray(ArrayList<String> aList){
    	String array[] = new String[aList.size()];
    	
    	for(int i=0; i<aList.size(); i++){
    		array[i] = aList.get(i);
    	}
    	
    	for (int i = 0; i < array.length-1; i++) {
			for (int j = array.length-2; j>=i; j--) {
				if (array[j].compareToIgnoreCase(array[j+1])>0) {
					String temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
    	
    	return array;
    }
    
}