use strict;
use warnings;

our @Initial = (sub {
    my $searches = RT::Attributes->new(RT->SystemUser);
    $searches->Limit( FIELD => 'Name', VALUE => 'SavedSearch' );
    $searches->OrderBy( FIELD => 'id' );

    while (my $search = $searches->Next) {
        my $content = $search->Content;
        next unless ref $content eq 'HASH';
        next unless ($content->{SearchType} || '') eq 'Chart';

        # Switch from PrimaryGroupBy to GroupBy name
        # Switch from "CreatedMonthly" to "Created.Monthly"
        $content->{GroupBy} ||= [delete $content->{PrimaryGroupBy}];
        for (@{$content->{GroupBy}}) {
            next if !defined || /\./;
            s/(?<=[a-z])(?=[A-Z])/./;
        }

        my ($ok, $msg) = $search->SetContent($content);
        RT->Logger->error("Unable to upgrade saved chart #@{[$search->id]}: $msg")
            unless $ok;
    }
});
