# Copyright (C) 2022 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Contains the public API for generating C++ tables."""

from dataclasses import dataclass
from enum import auto
from enum import Flag as enum_Flag
from typing import Dict
from typing import List
from typing import Optional
from typing import Union


@dataclass
class CppColumnType:
  """
  The type of a column on a C++ table.

  See below for subclasses of this class which can be used.
  """


class ColumnFlag(enum_Flag):
  """
  Flags which should be associated to the C++ table column.

  For more information on each option here, see the Column::Flag
  enum. Keep this in sync with Column::Flag.
  """
  NONE = 0
  SORTED = auto()
  SET_ID = auto()


@dataclass
class Column:
  """
  Representation of a column of a C++ table.

  Attributes:
    name: The name of the column.
    type: The type of the column.
    flags: Flags for the column, ColumnFlag.NONE by default.
  """
  name: str
  type: CppColumnType
  flags: ColumnFlag = ColumnFlag.NONE

  # Private fields used by the generator. Do not set these manually.
  _is_auto_added_id: bool = False
  _is_auto_added_type: bool = False
  _is_self_column: bool = True


@dataclass
class ColumnDoc:
  """
  Documentation for the C++ table column.

  Used to generate reference pages on the docs website.

  Attributes:
    doc: Freeform docstring for the column.
    joinable: Indicates this column is joinable with a column
    from another table. Should have the format "table.column".
  """
  doc: str
  joinable: Optional[str] = None


@dataclass
class TableDoc:
  """
  Documentation for the C++ table.

  Used to generate reference pages on the docs website.

  Attributes:
    doc: Freeform docstring for the table.
    group: The group of tables this table belongs to. Examples include "Tracks",
    "Events", "ART Heap Graphs" etc: see the docs page for all the existing
    groups.
    columns: Documentation for each table column.
    skip_id_and_type: Skips publishing these columns in the documentation.
    Should only be used when these columns
    are not meaningful or are aliased to something better.
  """
  doc: str
  group: str
  columns: Dict[str, Union[ColumnDoc, str]]
  skip_id_and_type: bool = False


@dataclass
class WrappingSqlView:
  """
  Specifies information about SQL view wrapping a table.

  Useful for tables which are not exposed directly to
  SQL but instead are wrapped with a SQL view.

  Attributes:
    view_name: The name of the SQL view exposed to SQL.
  """
  view_name: str


@dataclass
class Table:
  """
  Representation of of a C++ table.

  Attributes:
    class_name: Name of the C++ table class.
    sql_name: Name of the table in SQL.
    columns: The columns in this table.
    tabledoc: Documentation for this table. Can include
    documentation overrides for auto-added columns (i.e.
    id and type) and aliases added in |wrapping_sql_view|.
    parent: The parent ("super-class") table for this table.
    wrapping_sql_view: See |WrappingSqlView|.
  """
  class_name: str
  sql_name: str
  columns: List[Column]
  tabledoc: TableDoc
  parent: Optional['Table'] = None
  wrapping_sql_view: Optional[WrappingSqlView] = None


@dataclass
class CppInt64(CppColumnType):
  """Represents the int64_t C++ type."""


@dataclass
class CppUint32(CppColumnType):
  """Represents the uint32_t C++ type."""


@dataclass
class CppInt32(CppColumnType):
  """Represents the int32_t C++ type."""


@dataclass
class CppDouble(CppColumnType):
  """Represents the double C++ type."""


@dataclass
class CppString(CppColumnType):
  """Represents the StringPool::Id C++ type."""


@dataclass
class CppOptional(CppColumnType):
  """Represents the base::Optional C++ type."""
  inner: CppColumnType


@dataclass
class CppTableId(CppColumnType):
  """Represents the Table::Id C++ type."""
  table: Table


@dataclass
class CppSelfTableId(CppColumnType):
  """Represents the Id C++ type."""


@dataclass
class Alias(CppColumnType):
  """Represents a column which aliases another column.

  Aliasing refers to re-exporting a column with a different name. This is useful
  especially for exporting "id" columns which names which associate it to the
  table name: e.g. exporting thread.id as thread.utid"""
  underlying_column: str
