#!/usr/bin/env perl
use strict;
use warnings;
use Google::ProtocolBuffers;
use File::Spec::Functions qw(catfile);
use File::Temp qw(tempfile);
use FindBin qw($Bin);

my ($in) = @ARGV;
die "USAGE: PROTO_INPUT\n" unless $in;

my $outfile = catfile($Bin, qw(.. lib Mesos Messages.pm));
open my($outfh), ">", $outfile;
add_message_docs($outfh);

my $clean_proto = scrub_file($in);
my $opts = {
    generate_code    => $outfh,
    create_accessors => 1,
};
Google::ProtocolBuffers->parsefile($clean_proto, $opts);

sub scrub_file {
    my ($proto) = @_;
    my $tmp = File::Temp->new();
    my $contents = slurp($proto);
    $contents =~ s{/\*.*?\*/\s*}{}sg;
    $tmp->print($contents);
    $tmp->flush;
    return $tmp;
}

sub slurp {
    my ($file) = @_;
    open(my $fh, $file);
    my $contents = join '', <$fh>;
    close $fh;
    return $contents;
}

sub add_message_docs {
    my ($outfh) = @_;
    print $outfh <<'__END__';
package Mesos::Messages;

=head1 NAME

Mesos::Messages - load Mesos protobuf message classes

=head1 DESCRIPTION

This file is automatically generated from bin/generate_messages. Creates Mesos protobuf message classes using Google::ProtocolBuffers.

=cut

__END__
}

