#!/usr/bin/perl

use strict;
use warnings;
use Carp;

use CPAN::Meta qw(load_file);
use YAML::XS qw(DumpFile);

my ( $meta, $upstream );

if ( -r 'META.json' ) {
    $meta = CPAN::Meta->load_file('META.json');
} elsif ( -r 'META.yml' ) {
    $meta = CPAN::Meta->load_file('META.yml');
} else {
    croak 'Neither META.json nor META.yml found.';
}

# Read values from META
$upstream->{"Archive"}           = 'CPAN';
$upstream->{"Name"}              = $meta->{name};
$upstream->{"Contact"}           = join( ', ', @{ $meta->{author} } );
# $upstream->{"Homepage"}        = $meta->{resources}->{homepage};
$upstream->{"Bug-Database"}      = $meta->{resources}->{bugtracker}->{web};
$upstream->{"Bug-Submit"}        = $meta->{resources}->{bugtracker}->{mailto};
$upstream->{"Repository"}        = $meta->{resources}->{repository}->{url};
$upstream->{"Repository-Browse"} = $meta->{resources}->{repository}->{web};

my %secure_URL = (
    'https://rt.cpan.org/' => [qw(
        http://rt.cpan.org/
    )],

    'https://github.com/' => [qw(
        git://github.com/
        git@github.com:
        http://github.com/
        ssh://git@github.com/
    )],
);

# Switch to secure URLs
for my $replacement (keys %secure_URL) {
    my $regex = build_regex(@{ $secure_URL{$replacement} });
    foreach (qw(
        Bug-Database
        Repository
        Repository-Browse
    )) {
        $upstream->{$_} =~ s|$regex|$replacement| if $upstream->{$_};
    }
}

foreach ( keys %{$upstream} ) {
    delete $upstream->{$_} unless defined $upstream->{$_};
}

mkdir('debian/upstream');
DumpFile( 'debian/upstream/metadata', $upstream );

sub build_regex {
    my @prefixes = map quotemeta, @_;
    my $regex = '(' . join('|', @prefixes) . ')';
    return qr/$regex/;
}

=pod

=head1 NAME

dpt-debian-upstream - convert resources from META.{json,yml} to debian/upstream/metadata

=head1 SYNOPSIS

B<dpt debian-upstream>

=head1 DESCRIPTION

B<dpt debian-upstream> reads information from F<META.json> or F<META.yml> and
writes them to F<debian/upstream/metadata>, according to the UpstreamMetaData
specification.

Please, note that upstream links will be switched to https URLs.

=head1 SEE ALSO

=over

=item *

L<CPAN::Meta::Spec>

=item *

L<UpstreamMetaData|https://wiki.debian.org/UpstreamMetadata>

=back

=head1 COPYRIGHT AND LICENSE

=over

=item Copyright 2013-2014, gregor herrmann L<gregoa@debian.org>

=item Copyright 2016, Alex Muntada L<alexm@alexm.org>

=back

This program is free software and can be distributed under the same terms as
Perl.
