#!/usr/bin/perl

use strict;
use warnings;
use File::Slurp;   # read_dir write_file
use cPanelSyncUtil qw(_tuxify_pwd_recursively _raw_dir _get_opts_hash _sync_touchlock_pwd);

my $cpaddons_root = '/home/cpanel/cpanelsync/cpaddons';
my $root          = $cpaddons_root . '/cPanel';

my %options = _get_opts_hash('qa:f:t:');
# a = cpaddon catagory (-a Bulletin_Boards)
# f = cpaddon name (-f YaBB)
# t = action (bz2|lock|unlock|sync)

chdir $cpaddons_root or die "Could not go into base dir: $!";
system 'bzip2', '-k', 'cPAddonsAvailable.pm';
system 'bzip2', '-k', 'cPAddons.pm';

_raw_dir($cpaddons_root, '_theme', 1, read_dir('_theme')) 
    or warn "_raw_dir _theme: $!";
_raw_dir($cpaddons_root, '_scripts', 1, read_dir('_scripts')) 
    or warn "_raw_dir _scripts: $!";
_raw_dir($cpaddons_root, '_whm_cgi', 1, read_dir('_whm_cgi')) 
    or warn "_raw_dir _whm_cgi: $!";

my @md5files = grep { m/\.pm$/ } read_dir("$cpaddons_root/cPAddonsMD5");
_raw_dir($cpaddons_root, 'cPAddonsMD5', 0, @md5files) 
    or warn "_raw_dir $cpaddons_root: $!";

die '-t action (bz2|lock|unlock|sync) is required' if $options{'t'} eq '';
die "-a may only be one of the directories in $root"
    if $options{'a'} ne "" && ! -d "$root/$options{'a'}";

_tuxify_pwd_recursively();


system '/home/cpanel/cpanelsync/cpaddons/builddistlist';

exec '/usr/local/scripts/updatecpaddons' if $options{'t'} eq 'sync';

ROOT:
for my $dir (read_dir $root) {
    next ROOT if $dir =~ /\.bak/
                 || $dir =~ /^\./
                 || !-d "$root/$dir"
	         || -l "$root/$dir"
	         || ($options{'a'} ne '' && $dir ne $options{'a'});

    if(!chdir "$root/$dir") {
        warn "Could not go into $root/$dir: $!";
        next ROOT;
    } 

    _tuxify_pwd_recursively();

    SUBDIR:
    for my $name (read_dir '.') {
       next SUBDIR if $name =~ /^\./
                      || !-d "$root/$dir/$name"
                      || -l "$root/$dir/$name"
                      || ($options{'f'} ne '' && $name !~ /^$options{'f'}/);
        if($options{'t'} eq 'bz2') {
            system 'bzip2', '-k', "$name.pm"; 

            _raw_dir("$root/$dir", $name, 1) 
                or warn "_raw_dir  $root/$dir: $!";
            _sync_touchlock_pwd();
        } elsif($options{'t'} eq 'lock') {
            write_file("$root/$dir/$name/.cpanelsync.lock", 'locked');
        } elsif($options{'t'} eq 'unlock') {
            write_file("$root/$dir/$name/.cpanelsync.lock", '');
        }
        _tuxify_pwd_recursively();
#        ADDON_DIR:
#        for my $addon (read_dir("$root/$dir/$name")) {
#print "Starting $name $addon\n\n\n\n";
#            next ADDON_DIR if $addon =~ /^\./
#                           || !-d "$root/$dir/$name/$addon"
#                           || -l "$root/$dir/$name/$addon";
#print "Doing ADDON $addon\n\n\n";
#            _raw_dir("$root/$dir/$name", $addon, 1);
#        }
#        chdir "$root/$dir" or die "Could not go back to $root/$dir";
    }
}
