from datetime import date

from creative_module.models import AccountSyncLog
from creative_module.services.onboarding_service import refresh_onboarding_run
from data_pipeline_module.constants import SyncJobType
from data_pipeline_module.models import PipelineSyncStatus
from data_pipeline_module.services.sync_service import AccountSyncService
from organization_auth.models import Account


service = AccountSyncService()


def refresh(run_id: str):
    run = AccountSyncLog.objects.select_related("account").get(id=run_id)
    refreshed = refresh_onboarding_run(run)
    print(
        refreshed.id,
        refreshed.account_id,
        refreshed.overall_status,
        refreshed.current_stage,
        refreshed.ad_creative_sync_status,
        refreshed.stats_sync_status,
        refreshed.ai_reports_status,
        refreshed.stats_days_completed,
        refreshed.stats_days_total,
    )


# 1) TIKTOK / Cafam Droguerias:
# One aggregate date failed with a transient-looking token resolution error.
service.sync_account_date_range(
    account_id="5258b660-b3a1-4dfb-91f8-fc11faf32755",
    user_id="263e7df2-09fb-4b7e-a17d-277298aed6ef",
    start_date=date(2025, 9, 9),
    end_date=date(2025, 9, 9),
    job_type=SyncJobType.BACKFILL.value,
    account_sync_log_id="7908399c-fed9-4f88-933e-18220a31f34c",
)
if PipelineSyncStatus.objects.get(
    account_id="5258b660-b3a1-4dfb-91f8-fc11faf32755",
    platform="TIKTOK",
    sync_date=date(2025, 9, 9),
).status == "SUCCESS":
    service.sync_account_breakdowns(
        account_id="5258b660-b3a1-4dfb-91f8-fc11faf32755",
        user_id="263e7df2-09fb-4b7e-a17d-277298aed6ef",
        dates=[date(2025, 9, 9)],
        platform="TIKTOK",
        job_type=SyncJobType.BACKFILL.value,
        account_sync_log_id="7908399c-fed9-4f88-933e-18220a31f34c",
    )
refresh("7908399c-fed9-4f88-933e-18220a31f34c")


# 2) FACEBOOK demo / OpenTable:
# Four old RUNNING breakdown rows are stale. This retries only the stale
# breakdowns because terminal SUCCESS rows are skipped by the service.
service.sync_account_breakdowns(
    account_id="a0b185d4-d194-4cf5-b342-edf86a665d49",
    user_id="eada60a0-9902-40c9-9afc-570db1c23514",
    dates=[
        date(2025, 8, 14),
        date(2025, 11, 9),
        date(2025, 11, 12),
        date(2025, 12, 31),
    ],
    platform="FACEBOOK",
    job_type=SyncJobType.BACKFILL.value,
    account_sync_log_id="2bbacc00-76c3-4359-b9bd-08d4f92134e6",
)
refresh("2bbacc00-76c3-4359-b9bd-08d4f92134e6")


# 3) FACEBOOK / Lead Buyer Hub:
# The run expects stats from 2025-04-01, but the account first synced on
# 2025-06-04. Align the run to the data-pipeline backfill start.
run = AccountSyncLog.objects.select_related("account").get(
    id="773405ee-b863-49a7-8cac-79bb8249b04d",
    account_id="fa86db9b-cb49-4cea-a9dc-083e0e69d1de",
)
account = Account.objects.get(id=run.account_id)
if account.first_synced_date != date(2025, 6, 4):
    raise RuntimeError(
        f"Unexpected first_synced_date for {account.id}: {account.first_synced_date}"
    )
run.window_start = account.first_synced_date
run.save(update_fields=["window_start", "updated_at"])
refresh("773405ee-b863-49a7-8cac-79bb8249b04d")
