"""Session related attribute container definitions."""

import time
import uuid

from acstore.containers import interface
from acstore.containers import manager

import plaso


class Session(interface.AttributeContainer):
    """Session attribute container.

    Attributes:
      aborted (bool): True if the session was aborted.
      artifact_filters (list[str]): Names of artifact definitions that are
          used for filtering file system and Windows Registry key paths.
      command_line_arguments (str): command line arguments.
      completion_time (int): time that the session was completed. Contains the
          number of micro seconds since January 1, 1970, 00:00:00 UTC.
      debug_mode (bool): True if debug mode was enabled.
      enabled_parser_names (list[str]): parser and parser plugin names that
           were enabled.
      filter_file (str): path to a file with find specifications.
      identifier (str): unique identifier of the session.
      parser_filter_expression (str): parser filter expression.
      preferred_codepage (str): preferred codepage.
      preferred_encoding (str): preferred encoding.
      preferred_language (str): preferred language.
      preferred_time_zone (str): preferred time zone.
      preferred_year (int): preferred year.
      product_name (str): name of the product that created the session for
          example "log2timeline".
      product_version (str): version of the product that created the session.
      start_time (int): time that the session was started. Contains the number
          of micro seconds since January 1, 1970, 00:00:00 UTC.
    """

    CONTAINER_TYPE = "session"

    SCHEMA = {
        "file_entropy": "str",
        "aborted": "bool",
        "artifact_filters": "List[str]",
        "command_line_arguments": "str",
        "completion_time": "int",
        "debug_mode": "bool",
        "enabled_parser_names": "List[str]",
        "filter_file": "str",
        "identifier": "str",
        "parser_filter_expression": "str",
        "preferred_codepage": "str",
        "preferred_encoding": "str",
        "preferred_language": "str",
        "preferred_time_zone": "str",
        "preferred_year": "int",
        "product_name": "str",
        "product_version": "str",
        "start_time": "int",
    }

    def __init__(self):
        """Initializes a session attribute container."""
        super().__init__()
        self.aborted = False
        self.artifact_filters = None
        self.command_line_arguments = None
        self.completion_time = None
        self.debug_mode = False
        self.enabled_parser_names = None
        self.filter_file = None
        self.identifier = f"{uuid.uuid4().hex:s}"
        self.parser_filter_expression = None
        self.preferred_codepage = None
        self.preferred_encoding = "utf-8"
        self.preferred_language = None
        self.preferred_time_zone = "UTC"
        self.preferred_year = None
        self.product_name = "plaso"
        self.product_version = plaso.__version__
        self.start_time = int(time.time() * 1000000)


manager.AttributeContainersManager.RegisterAttributeContainer(Session)
