package GSB::Edit;
require Exporter;

use strict;
use warnings;
use Tie::File;

our @ISA       = qw(Exporter);
our @EXPORT    = qw(gsb_sb_edit);
our @EXPORT_OK = qw(gsb_version_edit gsb_build_edit);
our $VERSION   = 0.03;

################################################################################
#
# Functions

# Edit the VERSION and BUILD variables with helper functions
# give the function a SlackBuild file and a version number as args
sub gsb_sb_edit {

  my $file = shift;
  my $new_ver = shift;

  tie my @fh, 'Tie::File', $file
    or die "Cannot open $file: $!";

  my $sb_version = gsb_version_get(@fh);
  my $sb_build   = gsb_build_get(@fh);

  if ( $new_ver eq $sb_version ) {
    #my $new_build_num = $sb_build + 1;
    #@fh = gsb_build_edit($new_build_num, @fh);
  } else {
    @fh = gsb_version_edit($new_ver, @fh);
    @fh = gsb_build_edit("1", @fh);
  }

  untie @fh;
}

# Edit the VERSION variable
# give the function a version number and array as args
sub gsb_version_edit {

  my $newver = shift;
  my @arr    = @_;

  for (@arr) {
    s/^VERSION=(.*)$/VERSION=$newver/;
  }

  return @arr;
}

# Edit the ^BUILD= variable
# Give the function a number as an arg
sub gsb_build_edit {

  my $newnum = shift;
  my @arr    = @_;

  for (@arr) {
    s/^BUILD=(.*)$/BUILD=$newnum/;
  }

  return @arr;
}

# get the value from the VERSION= variable
# give function array
sub gsb_version_get {

  my $version_num = "";
  my @arr         = @_;

  for (@arr) {
    if ( /^VERSION=(.*)$/ ) {
      $version_num = $1;
    }
  }
  return $version_num;
}

# give function array
sub gsb_build_get{

  my $build_num = "";
  my @arr       = @_;

  for (@arr) {
    if ( /^BUILD=(.*)$/ ) {
      $build_num = $1;
    }
  }

  return $build_num;
}

# append gsb or frg or any string to all BUILD variables in slackbuild files
# give function release string (gsb or frg) and file array
sub gsb_build_release_make {

  my $file = shift;
  my $release = shift;

  tie my @fh, 'Tie::File', $file
    or die "Cannot open $file: $!";

  for (@fh) {
    s/^BUILD=([1-9]*).*$/BUILD=$1$release/;
  }

  untie @fh;
}

# function for arbitrary variable edit
sub gsb_sb_double_edit {

  my $file    = shift;
  my $new_ver = shift;
  my $new_var = shift;

  tie my @fh, 'Tie::File', $file
    or die "Cannot open $file: $!";

  for (@fh) {
    if ( /^$new_var=(.*)$/ ){
      s/^$new_var=.*$/$new_var=$new_ver/;
    }
  }

  untie @fh;
}

#
# End Functions
################################################################################
