from datetime import datetime, timezone, timedelta
import logging
import logging.config
import json
import os

from pydantic import ValidationError

from log_stream.log_stream import LogStream


def main():
    setup_logging()
    log_query = """
    severity>="ERROR"
    """
    now = datetime.now(timezone.utc)
    one_week_ago = now - timedelta(days=7)
    project = os.environ.get("CLOUDSDK_CORE_PROJECT")
    assert isinstance(project, str)
    access_token = os.environ.get("ACCESS_TOKEN")
    assert isinstance(access_token, str)
    logs = LogStream(log_query, project, one_week_ago, now, lambda: access_token)
    for log in logs.parsed():
        print(log.model_dump_json())


def setup_logging():
    logging_config = {
        "version": 1,
        "disable_existing_loggers": False,
        "formatters": {
            "regular": {
                "format": "%(asctime)s %(name)-12s %(levelname)-8s %(message)s",
            }
        },
        "handlers": {
            "console": {
                "class": "logging.StreamHandler",
                "level": "INFO",
                "formatter": "regular",
            }
        },
        "root": {
            "handlers": ["console"],
            "level": "INFO",
        },
        "loggers": {"LogStream": {"level": "WARNING"}},
    }
    logging.config.dictConfig(logging_config)


if __name__ == "__main__":
    main()