#!/usr/bin/env python
from sentry.runner import configure

configure()

from datetime import datetime, timedelta

import click
import requests
from django.conf import settings

from sentry.constants import DataCategory
from sentry.utils import json
from sentry.utils.outcomes import Outcome

# import random


def store_outcomes(outcome, num_times=1):
    outcomes = []
    for _ in range(num_times):
        outcome_copy = outcome.copy()
        outcome_copy["timestamp"] = outcome_copy["timestamp"].strftime("%Y-%m-%dT%H:%M:%S.%fZ")
        outcomes.append(outcome_copy)

    req = requests.post(
        settings.SENTRY_SNUBA + "/tests/entities/outcomes/insert", data=json.dumps(outcomes)
    )
    req.raise_for_status()


def generate_outcomes():
    for i in range(0, 180):
        for outcome in [
            Outcome.RATE_LIMITED,
            Outcome.INVALID,
            Outcome.ACCEPTED,
            Outcome.FILTERED,
        ]:
            # print(datetime.now() - timedelta(hours=1840))
            click.echo(i)
            for category in [
                DataCategory.ERROR,
                DataCategory.DEFAULT,
                DataCategory.TRANSACTION,
                DataCategory.ATTACHMENT,
            ]:
                attachments_multiplier = 1000 if category == DataCategory.ATTACHMENT else 1
                store_outcomes(
                    {
                        "org_id": 1,
                        "timestamp": datetime.now() - timedelta(hours=i),
                        "project_id": 1,
                        "outcome": outcome,
                        "reason": "none",
                        "category": category,
                        "quantity": 100 * attachments_multiplier * 500,
                    },
                    1,
                )


def drop_outcomes():
    assert requests.post(settings.SENTRY_SNUBA + "/tests/entities/outcomes/drop").status_code == 200


if __name__ == "__main__":
    generate_outcomes()