"""Keyword and operator lists for SQL completion."""

from __future__ import annotations

SQL_OPERATORS = [
    "=",
    "!=",
    "<>",
    "<",
    ">",
    "<=",
    ">=",
    "IS NULL",
    "IS NOT NULL",
    "IN",
    "NOT IN",
    "LIKE",
    "NOT LIKE",
    "ILIKE",
    "NOT ILIKE",
    "BETWEEN",
    "NOT BETWEEN",
    "EXISTS",
    "NOT EXISTS",
]

# SQL Keywords grouped by category
SQL_KEYWORDS = {
    "dml": [
        "SELECT",
        "FROM",
        "WHERE",
        "JOIN",
        "LEFT",
        "RIGHT",
        "INNER",
        "OUTER",
        "CROSS",
        "FULL",
        "ON",
        "AND",
        "OR",
        "NOT",
        "IN",
        "EXISTS",
        "BETWEEN",
        "LIKE",
        "IS",
        "NULL",
        "ORDER",
        "BY",
        "ASC",
        "DESC",
        "GROUP",
        "HAVING",
        "LIMIT",
        "OFFSET",
        "TOP",
        "DISTINCT",
        "AS",
        "UNION",
        "INTERSECT",
        "EXCEPT",
        "ALL",
        "INSERT",
        "INTO",
        "VALUES",
        "UPDATE",
        "SET",
        "DELETE",
        "MERGE",
        "USING",
        "MATCHED",
    ],
    "ddl": [
        "CREATE",
        "ALTER",
        "DROP",
        "TRUNCATE",
        "INDEX",
        "VIEW",
        "TABLE",
        "DATABASE",
        "SCHEMA",
        "CONSTRAINT",
        "PRIMARY",
        "KEY",
        "FOREIGN",
        "REFERENCES",
        "UNIQUE",
        "CHECK",
        "DEFAULT",
    ],
    "control": [
        "CASE",
        "WHEN",
        "THEN",
        "ELSE",
        "END",
        "IF",
        "BEGIN",
        "COMMIT",
        "ROLLBACK",
        "TRANSACTION",
    ],
    "types": [
        "INT",
        "INTEGER",
        "BIGINT",
        "SMALLINT",
        "TINYINT",
        "DECIMAL",
        "NUMERIC",
        "FLOAT",
        "REAL",
        "DOUBLE",
        "VARCHAR",
        "CHAR",
        "TEXT",
        "NVARCHAR",
        "NCHAR",
        "DATE",
        "TIME",
        "DATETIME",
        "TIMESTAMP",
        "BOOLEAN",
        "BIT",
        "BLOB",
        "CLOB",
        "UUID",
        "JSON",
        "XML",
    ],
}

# Common SQL functions
SQL_FUNCTIONS = {
    "aggregate": [
        "COUNT",
        "SUM",
        "AVG",
        "MIN",
        "MAX",
        "GROUP_CONCAT",
        "STRING_AGG",
        "ARRAY_AGG",
        "LISTAGG",
    ],
    "conditional": [
        "COALESCE",
        "NULLIF",
        "IFNULL",
        "NVL",
        "NVL2",
        "ISNULL",
    ],
    "string": [
        "CONCAT",
        "SUBSTRING",
        "SUBSTR",
        "LEFT",
        "RIGHT",
        "TRIM",
        "LTRIM",
        "RTRIM",
        "UPPER",
        "LOWER",
        "LENGTH",
        "LEN",
        "CHARINDEX",
        "POSITION",
        "REPLACE",
        "REVERSE",
        "SPLIT_PART",
        "STUFF",
    ],
    "numeric": [
        "ABS",
        "ROUND",
        "FLOOR",
        "CEILING",
        "CEIL",
        "POWER",
        "SQRT",
        "MOD",
        "SIGN",
        "RAND",
        "RANDOM",
    ],
    "datetime": [
        "NOW",
        "CURRENT_DATE",
        "CURRENT_TIME",
        "CURRENT_TIMESTAMP",
        "GETDATE",
        "GETUTCDATE",
        "SYSDATETIME",
        "DATEADD",
        "DATEDIFF",
        "DATEPART",
        "YEAR",
        "MONTH",
        "DAY",
        "HOUR",
        "MINUTE",
        "SECOND",
        "EXTRACT",
        "DATE_TRUNC",
        "DATE_FORMAT",
    ],
    "math": [
        "LOG",
        "LOG10",
        "EXP",
        "PI",
        "SIN",
        "COS",
        "TAN",
    ],
    "conversion": [
        "CAST",
        "CONVERT",
        "TRY_CAST",
        "TRY_CONVERT",
    ],
}
