#!/usr/bin/perl

# Copyright © 2022 Felix Lechner <felix.lechner@lease-up.com>
#
# based on a shell script by the same name
#     Joachim Breitner <nomeata@debian.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

use v5.20;
use warnings;
use utf8;

use Const::Fast;
use Path::Tiny;

use Debian::Debhelper::Buildsystem::Haskell::Recipes qw(
  installable_type
);
use Debian::Debhelper::Dh_Lib;

const my $EMPTY => q{};
const my $NEWLINE => qq{\n};

const my $MAGIC_MARKER => q/${Newline}/;

init(
    options => {
        'type=s' => \$dh{TYPE},
    });


for my $installable (@{ $dh{DOPACKAGES} }) {
    my $type = $dh{TYPE} // installable_type($installable);

    my $short_blurb;
    my $long_blurb;

    if ($type eq 'dev') {

        $short_blurb = $EMPTY;
        $long_blurb =<< 'QUOTE_END';
This package provides a library for the Haskell programming language.
See http://www.haskell.org/ for more information on Haskell.
QUOTE_END
    } elsif ($type eq 'prof') {

        $short_blurb = '; profiling libraries';
        $long_blurb = << 'QUOTE_END';
This package provides a library for the Haskell programming language, compiled
for profiling.  See http://www.haskell.org/ for more information on Haskell.
QUOTE_END
    } elsif ($type eq 'doc') {

        $short_blurb = '; documentation';
        $long_blurb = << 'QUOTE_END';
This package provides the documentation for a library for the Haskell
programming language.
See http://www.haskell.org/ for more information on Haskell.
QUOTE_END
    } else {
        next;
    }

    $short_blurb //= $EMPTY;
    $long_blurb //= $EMPTY;

    chomp $short_blurb;
    chomp $long_blurb;

    # replace newlines with magic marker
    $long_blurb =~ s{ \n }{$MAGIC_MARKER}gx;

    my $substvars_path = "debian/$installable.substvars";

    replace_line($substvars_path, 'haskell:ShortBlurb',$short_blurb // $EMPTY);
    replace_line($substvars_path, 'haskell:Blurb', $long_blurb // $EMPTY);
}

exit;

sub replace_line {
    my ($path, $field, $value) = @_;

    $value //= $EMPTY;

    path($path)->touch;

    my @lines = grep { !m{^ $field = }x } path($path)->lines_utf8;

    push(@lines, "$field=$value" . $NEWLINE);

    path($path)->spew_utf8(@lines);

    return;
}

=head1 NAME

dh_haskell_blurbs - standard haskell package description blurbs

=head1 SYNOPSIS

B<dh_haskell_blurbs> [S<I<debhelper options>>]
[B<--type=>I<blurb-type>]

=head1 DESCRIPTION

dh_haskell_blurbs is a Debhelper program that provides substvars for standard blurbs in Haskell package descriptions.
You can use it like this: C<${haskell:Blurb}>

or like that: C<${haskell:Blurb}>

=head1 SEE ALSO

L<debhelper(7)>

=head1 AUTHOR

Joachim Breitner <nomeata@debian.org>

=cut

# Local Variables:
# indent-tabs-mode: nil
# cperl-indent-level: 4
# End:
# vim: syntax=perl sw=4 sts=4 sr et
