package ID3FS::File::Ogg;

use strict;
use warnings;
use Ogg::Vorbis::Header;

sub new
{
    my $proto=shift;
    my $class=ref($proto) || $proto;
    my $self={};
    bless($self,$class);

    $self->{path}=shift;
    $self->{ogg}=Ogg::Vorbis::Header->new($self->{path});
    return $self;
}

sub get
{
    my ($self, $tag, $verbose)=@_;
    my @comments=$self->{ogg}->comment($tag);
    if(@comments)
    {
	# take first comment with actual contents
	while(my $comment=shift @comments)
	{
	    if(defined($comment) &&
	       length($comment)  &&
	       $comment =~ /\S+/)
	    {
		$comment =~ s/\//-/g; # drop slashes
		return $comment;
	    }
	}
    }
    warn("$self->{path}: no $tag defined in Ogg comments\n") if($verbose);
    return undef;
}

sub artist    { shift->get("Artist", 1); }
sub album     { shift->get("Album", 1);  }
sub audiotype { return "ogg";            }
sub haspic    { return undef;            } # FIXME
sub v1genre   { return undef;            } # ID3 only

# We don't care if year is not set
sub year
{
    my ($self)=@_;
    my $date=shift->get("Date", 0);
    return undef unless($date);
    if($date =~/(\d\d\d\d)/)
    {
	$date=$1;
    }
    return $date;
}

sub tags
{
    my $self=shift;
    my @comments=$self->{ogg}->comment("Genre");
    my $tags={};
    if(@comments)
    {
	# filter for useful comments
	@comments= grep { defined($_); } @comments;
	@comments= grep { length($_); }  @comments;
	@comments= grep { /\S+/; }       @comments;
	for my $comment (@comments)
	{
	    if($comment=~/([^\/]+)\/(.*)/)
	    {
		my $tagname=$1;
		my $tagval=$2;
		$tagval=~s/\//-/g;
		$tags->{$tagname}=$tagval;
	    }
	    else
	    {
		$tags->{$comment}=undef;
	    }
	}
    }
    return $tags;
}

1;

