from django.core.management.base import BaseCommand, CommandError

from season_ratification.models import SeasonRatificationRecord

from official_history.services import OfficialHistoryProjectionService


class Command(BaseCommand):
    help = "Build/backfill immutable official-history projections from ratified seasons."

    def add_arguments(self, parser):
        parser.add_argument("--season-id", type=int, default=None)
        parser.add_argument("--ratification-id", default=None)
        parser.add_argument("--all", action="store_true", dest="all_records")

    def handle(self, *args, **options):
        qs = SeasonRatificationRecord.objects.select_related("season").order_by("season__start_date", "pk")
        if options["ratification_id"]:
            qs = qs.filter(pk=options["ratification_id"])
        elif options["season_id"] is not None:
            qs = qs.filter(season_id=options["season_id"])
        elif not options["all_records"]:
            raise CommandError("Specify --season-id, --ratification-id or --all.")

        built = 0
        for ratification in qs.iterator():
            projection = OfficialHistoryProjectionService.project(ratification_id=ratification.pk)
            built += 1
            self.stdout.write(
                f"season={ratification.season_id} projection={projection.pk} sequence={projection.sequence} hash={projection.projection_hash}"
            )
        self.stdout.write(self.style.SUCCESS(f"Official-history projection pass complete: {built} ratification(s)."))
