#!/usr/bin/perl

BEGIN { unshift @INC, '/usr/local/cpanel'; }

use strict;
use warnings;

use Cpanel::Domains             ();
use Cpanel::Config::CpUserGuard ();
use Cpanel::PwCache             ();

Cpanel::PwCache::init_passwdless_pwcache();

my $deleted_domains = Cpanel::Domains::load_deleted_db();

while ( my $user = ( Cpanel::PwCache::getpwent() )[0] ) {
    next if !-e '/var/cpanel/users/' . $user;
    my $cpuser_guard = Cpanel::Config::CpUserGuard->new($user);
    my $cpuser_data  = $cpuser_guard->{'data'};
    next if !@{ $cpuser_data->{'DEADDOMAINS'} };    # Skip accounts without DEADDOMAINS
    print "Checking XDNS entries for $user ... ";
    my @domains = @{ $cpuser_data->{'DOMAINS'} };
    my @deleted_domains;
    foreach my $dead_domain ( @{ $cpuser_data->{'DEADDOMAINS'} } ) {

        if ( $dead_domain eq $cpuser_data->{'DOMAIN'} ) {
            next;
        }
        elsif ( !exists $deleted_domains->{'data'}{$dead_domain} ) {
            print "restoring $dead_domain ... ";
            push @domains, $dead_domain;
        }
        elsif ( $deleted_domains->{'data'}{$dead_domain}{'user'} ne $user ) {
            print "restoring $dead_domain ... ";
            push @domains, $dead_domain;
        }
        else {
            push @deleted_domains, $dead_domain;
        }
    }
    $cpuser_data->{'DOMAINS'}     = \@domains;
    $cpuser_data->{'DEADDOMAINS'} = \@deleted_domains;
    $cpuser_guard->save();
    print "Done\n";
}
Cpanel::PwCache::endpwent();

print "Rebuilding user domain caches ... ";
system '/scripts/updateuserdomains';
print "Done\n";
