#!/usr/bin/perl

###############################################################
# Begin Modules
###############################################################

use warnings;
use strict; # We must for stability
use File::Find; # Needed for searching / portability

###############################################################
# Begin Global Variables
###############################################################

my $flac = "flac -s -c -d"; #temporary until .flacme is implemented
my @root = qw "/mnt/phoenix/sound/high_quality/albums /mnt/phoenix/sound/high_quality/individuals";
my $ver = "0.0.0a";
my $flac_count = 0;
my @music_list = ();

###############################################################
# Begin Signal Handlers
###############################################################

$SIG{'INT'} = 'terminate';

###############################################################
# Begin Body of the Script
###############################################################

&find_flac();
chomp(@music_list);
&version();
&count();
&play();
&terminate();

###############################################################
# Begin Subroutines
###############################################################

# subroutine terminate: built for expandability :)
sub terminate { exit(0); }

# basic version information
sub version {
    print `clear`;
    print "\n\tflacme is copyrighted under the GNU General Public License";
    print "\n\tfor more information on this license read http://www.gnu.org/ ";
    print "\n\tflacme-$ver\n\n\n"; }

# Purely evil and ugly find code (kept to the minimum for reading purposes)
sub find_flac { foreach (@root) { find ( \&wanted, "$_" ); } }

sub wanted { 
    if ( /\.(flac)$/ ) { push (@music_list, "$File::Find::dir/$_\n") } 
}

sub random { my $music_phile = $_[rand @_]; }

sub count { foreach (@music_list) { $flac_count++; }; }

sub play 
{
    for (;;) 
    {
	my $music_phile = &random(@music_list);
	print "$flac_count playing randomly...\n\n$music_phile";
	system "$flac $music_phile | rawplay";
	print `clear`;
    } 
}

