// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you 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.

use core::fmt;

#[cfg(not(feature = "std"))]
use alloc::{string::String, vec::Vec};

#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};

#[cfg(feature = "visitor")]
use sqlparser_derive::{Visit, VisitMut};

use super::display_separated;

/// Unary operators
#[derive(Debug, Copy, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
pub enum UnaryOperator {
    /// `@-@` Length or circumference (PostgreSQL/Redshift geometric operator)
    /// see <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    AtDashAt,
    /// Unary logical not operator: e.g. `! false` (Hive-specific)
    BangNot,
    /// Bitwise Not, e.g. `~9`
    BitwiseNot,
    /// `@@` Center (PostgreSQL/Redshift geometric operator)
    /// see <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    DoubleAt,
    /// `#` Number of points in path or polygon (PostgreSQL/Redshift geometric operator)
    /// see <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    Hash,
    /// Plus, e.g. `+9`
    Plus,
    /// Minus, e.g. `-9`
    Minus,
    /// Not, e.g. `NOT(true)`
    Not,
    /// Absolute value, e.g. `@ -9` (PostgreSQL-specific)
    PGAbs,
    /// Cube root, e.g. `||/27` (PostgreSQL-specific)
    PGCubeRoot,
    /// Factorial, e.g. `9!` (PostgreSQL-specific)
    PGPostfixFactorial,
    /// Factorial, e.g. `!!9` (PostgreSQL-specific)
    PGPrefixFactorial,
    /// Square root, e.g. `|/9` (PostgreSQL-specific)
    PGSquareRoot,
    /// `?-` Is horizontal? (PostgreSQL/Redshift geometric operator)
    /// see <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    QuestionDash,
    /// `?|` Is vertical? (PostgreSQL/Redshift geometric operator)
    /// see <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    QuestionPipe,
}

impl fmt::Display for UnaryOperator {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        f.write_str(match self {
            UnaryOperator::AtDashAt => "@-@",
            UnaryOperator::BangNot => "!",
            UnaryOperator::BitwiseNot => "~",
            UnaryOperator::DoubleAt => "@@",
            UnaryOperator::Hash => "#",
            UnaryOperator::Minus => "-",
            UnaryOperator::Not => "NOT",
            UnaryOperator::PGAbs => "@",
            UnaryOperator::PGCubeRoot => "||/",
            UnaryOperator::PGPostfixFactorial => "!",
            UnaryOperator::PGPrefixFactorial => "!!",
            UnaryOperator::PGSquareRoot => "|/",
            UnaryOperator::Plus => "+",
            UnaryOperator::QuestionDash => "?-",
            UnaryOperator::QuestionPipe => "?|",
        })
    }
}

/// Binary operators
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
pub enum BinaryOperator {
    /// Plus, e.g. `a + b`
    Plus,
    /// Minus, e.g. `a - b`
    Minus,
    /// Multiply, e.g. `a * b`
    Multiply,
    /// Divide, e.g. `a / b`
    Divide,
    /// Modulo, e.g. `a % b`
    Modulo,
    /// String/Array Concat operator, e.g. `a || b`
    StringConcat,
    /// Greater than, e.g. `a > b`
    Gt,
    /// Less than, e.g. `a < b`
    Lt,
    /// Greater equal, e.g. `a >= b`
    GtEq,
    /// Less equal, e.g. `a <= b`
    LtEq,
    /// Spaceship, e.g. `a <=> b`
    Spaceship,
    /// Equal, e.g. `a = b`
    Eq,
    /// Not equal, e.g. `a <> b`
    NotEq,
    /// And, e.g. `a AND b`
    And,
    /// Or, e.g. `a OR b`
    Or,
    /// XOR, e.g. `a XOR b`
    Xor,
    /// Bitwise or, e.g. `a | b`
    BitwiseOr,
    /// Bitwise and, e.g. `a & b`
    BitwiseAnd,
    /// Bitwise XOR, e.g. `a ^ b`
    BitwiseXor,
    /// Integer division operator `//` in DuckDB
    DuckIntegerDivide,
    /// MySQL [`DIV`](https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html) integer division
    MyIntegerDivide,
    /// MATCH operator, e.g. `a MATCH b` (SQLite-specific)
    /// See <https://www.sqlite.org/lang_expr.html#the_like_glob_regexp_match_and_extract_operators>
    Match,
    /// REGEXP operator, e.g. `a REGEXP b` (SQLite-specific)
    Regexp,
    /// Support for custom operators (such as Postgres custom operators)
    Custom(String),
    /// Bitwise XOR, e.g. `a # b` (PostgreSQL-specific)
    PGBitwiseXor,
    /// Bitwise shift left, e.g. `a << b` (PostgreSQL-specific)
    PGBitwiseShiftLeft,
    /// Bitwise shift right, e.g. `a >> b` (PostgreSQL-specific)
    PGBitwiseShiftRight,
    /// Exponent, e.g. `a ^ b` (PostgreSQL-specific)
    PGExp,
    /// Overlap operator, e.g. `a && b` (PostgreSQL-specific)
    PGOverlap,
    /// String matches regular expression (case sensitively), e.g. `a ~ b` (PostgreSQL-specific)
    PGRegexMatch,
    /// String matches regular expression (case insensitively), e.g. `a ~* b` (PostgreSQL-specific)
    PGRegexIMatch,
    /// String does not match regular expression (case sensitively), e.g. `a !~ b` (PostgreSQL-specific)
    PGRegexNotMatch,
    /// String does not match regular expression (case insensitively), e.g. `a !~* b` (PostgreSQL-specific)
    PGRegexNotIMatch,
    /// String matches pattern (case sensitively), e.g. `a ~~ b` (PostgreSQL-specific)
    PGLikeMatch,
    /// String matches pattern (case insensitively), e.g. `a ~~* b` (PostgreSQL-specific)
    PGILikeMatch,
    /// String does not match pattern (case sensitively), e.g. `a !~~ b` (PostgreSQL-specific)
    PGNotLikeMatch,
    /// String does not match pattern (case insensitively), e.g. `a !~~* b` (PostgreSQL-specific)
    PGNotILikeMatch,
    /// String "starts with", eg: `a ^@ b` (PostgreSQL-specific)
    PGStartsWith,
    /// The `->` operator.
    ///
    /// On PostgreSQL, this operator extracts a JSON object field or array
    /// element, for example `'{"a":"b"}'::json -> 'a'` or `[1, 2, 3]'::json
    /// -> 2`.
    ///
    /// See <https://www.postgresql.org/docs/current/functions-json.html>.
    Arrow,
    /// The `->>` operator.
    ///
    /// On PostgreSQL, this operator extracts a JSON object field or JSON
    /// array element and converts it to text, for example `'{"a":"b"}'::json
    /// ->> 'a'` or `[1, 2, 3]'::json ->> 2`.
    ///
    /// See <https://www.postgresql.org/docs/current/functions-json.html>.
    LongArrow,
    /// The `#>` operator.
    ///
    /// On PostgreSQL, this operator extracts a JSON sub-object at the specified
    /// path, for example:
    ///
    /// ```notrust
    ///'{"a": {"b": ["foo","bar"]}}'::json #> '{a,b,1}'
    /// ```
    ///
    /// See <https://www.postgresql.org/docs/current/functions-json.html>.
    HashArrow,
    /// The `#>>` operator.
    ///
    /// A PostgreSQL-specific operator that extracts JSON sub-object at the
    /// specified path, for example
    ///
    /// ```notrust
    ///'{"a": {"b": ["foo","bar"]}}'::json #>> '{a,b,1}'
    /// ```
    ///
    /// See <https://www.postgresql.org/docs/current/functions-json.html>.
    HashLongArrow,
    /// The `@@` operator.
    ///
    /// On PostgreSQL, this is used for JSON and text searches.
    ///
    /// See <https://www.postgresql.org/docs/current/functions-json.html>.
    /// See <https://www.postgresql.org/docs/current/functions-textsearch.html>.
    AtAt,
    /// The `@>` operator.
    ///
    /// On PostgreSQL, this is used for JSON and text searches.
    ///
    /// See <https://www.postgresql.org/docs/current/functions-json.html>.
    /// See <https://www.postgresql.org/docs/current/functions-textsearch.html>.
    AtArrow,
    /// The `<@` operator.
    ///
    /// On PostgreSQL, this is used for JSON and text searches.
    ///
    /// See <https://www.postgresql.org/docs/current/functions-json.html>.
    /// See <https://www.postgresql.org/docs/current/functions-textsearch.html>.
    ArrowAt,
    /// The `#-` operator.
    ///
    /// On PostgreSQL, this operator is used to delete a field or array element
    /// at a specified path.
    ///
    /// See <https://www.postgresql.org/docs/current/functions-json.html>.
    HashMinus,
    /// The `@?` operator.
    ///
    /// On PostgreSQL, this operator is used to check the given JSON path
    /// returns an item for the JSON value.
    ///
    /// See <https://www.postgresql.org/docs/current/functions-json.html>.
    AtQuestion,
    /// The `?` operator.
    ///
    /// On PostgreSQL, this operator is used to check whether a string exists as a top-level key
    /// within the JSON value
    ///
    /// See <https://www.postgresql.org/docs/current/functions-json.html>.
    Question,
    /// The `?&` operator.
    ///
    /// On PostgreSQL, this operator is used to check whether all of the the indicated array
    /// members exist as top-level keys.
    ///
    /// See <https://www.postgresql.org/docs/current/functions-json.html>.
    QuestionAnd,
    /// The `?|` operator.
    ///
    /// On PostgreSQL, this operator is used to check whether any of the the indicated array
    /// members exist as top-level keys.
    ///
    /// See <https://www.postgresql.org/docs/current/functions-json.html>.
    QuestionPipe,
    /// PostgreSQL-specific custom operator.
    ///
    /// See [CREATE OPERATOR](https://www.postgresql.org/docs/current/sql-createoperator.html)
    /// for more information.
    PGCustomBinaryOperator(Vec<String>),
    /// The `OVERLAPS` operator
    ///
    /// Specifies a test for an overlap between two datetime periods:
    /// <https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#overlaps-predicate>
    Overlaps,
    /// `##` Point of closest proximity (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    DoubleHash,
    /// `<->` Distance between (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    LtDashGt,
    /// `&<` Overlaps to left? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    AndLt,
    /// `&>` Overlaps to right? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    AndGt,
    /// `<<|` Is strictly below? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    LtLtPipe,
    /// `|>>` Is strictly above? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    PipeGtGt,
    /// `&<|` Does not extend above? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    AndLtPipe,
    /// `|&>` Does not extend below? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    PipeAndGt,
    /// `<^` Is below? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    LtCaret,
    /// `>^` Is above? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    GtCaret,
    /// `?#` Intersects? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    QuestionHash,
    /// `?-` Is horizontal? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    QuestionDash,
    /// `?-|` Is perpendicular? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    QuestionDashPipe,
    /// `?||` Are Parallel? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    QuestionDoublePipe,
    /// `@` Contained or on? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    At,
    /// `~=` Same as? (PostgreSQL/Redshift geometric operator)
    /// See <https://www.postgresql.org/docs/9.5/functions-geometry.html>
    TildeEq,
    /// ':=' Assignment Operator
    /// See <https://dev.mysql.com/doc/refman/8.4/en/assignment-operators.html#operator_assign-value>
    Assignment,
}

impl fmt::Display for BinaryOperator {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match self {
            BinaryOperator::Plus => f.write_str("+"),
            BinaryOperator::Minus => f.write_str("-"),
            BinaryOperator::Multiply => f.write_str("*"),
            BinaryOperator::Divide => f.write_str("/"),
            BinaryOperator::Modulo => f.write_str("%"),
            BinaryOperator::StringConcat => f.write_str("||"),
            BinaryOperator::Gt => f.write_str(">"),
            BinaryOperator::Lt => f.write_str("<"),
            BinaryOperator::GtEq => f.write_str(">="),
            BinaryOperator::LtEq => f.write_str("<="),
            BinaryOperator::Spaceship => f.write_str("<=>"),
            BinaryOperator::Eq => f.write_str("="),
            BinaryOperator::NotEq => f.write_str("<>"),
            BinaryOperator::And => f.write_str("AND"),
            BinaryOperator::Or => f.write_str("OR"),
            BinaryOperator::Xor => f.write_str("XOR"),
            BinaryOperator::BitwiseOr => f.write_str("|"),
            BinaryOperator::BitwiseAnd => f.write_str("&"),
            BinaryOperator::BitwiseXor => f.write_str("^"),
            BinaryOperator::DuckIntegerDivide => f.write_str("//"),
            BinaryOperator::MyIntegerDivide => f.write_str("DIV"),
            BinaryOperator::Match => f.write_str("MATCH"),
            BinaryOperator::Regexp => f.write_str("REGEXP"),
            BinaryOperator::Custom(s) => f.write_str(s),
            BinaryOperator::PGBitwiseXor => f.write_str("#"),
            BinaryOperator::PGBitwiseShiftLeft => f.write_str("<<"),
            BinaryOperator::PGBitwiseShiftRight => f.write_str(">>"),
            BinaryOperator::PGExp => f.write_str("^"),
            BinaryOperator::PGOverlap => f.write_str("&&"),
            BinaryOperator::PGRegexMatch => f.write_str("~"),
            BinaryOperator::PGRegexIMatch => f.write_str("~*"),
            BinaryOperator::PGRegexNotMatch => f.write_str("!~"),
            BinaryOperator::PGRegexNotIMatch => f.write_str("!~*"),
            BinaryOperator::PGLikeMatch => f.write_str("~~"),
            BinaryOperator::PGILikeMatch => f.write_str("~~*"),
            BinaryOperator::PGNotLikeMatch => f.write_str("!~~"),
            BinaryOperator::PGNotILikeMatch => f.write_str("!~~*"),
            BinaryOperator::PGStartsWith => f.write_str("^@"),
            BinaryOperator::Arrow => f.write_str("->"),
            BinaryOperator::LongArrow => f.write_str("->>"),
            BinaryOperator::HashArrow => f.write_str("#>"),
            BinaryOperator::HashLongArrow => f.write_str("#>>"),
            BinaryOperator::AtAt => f.write_str("@@"),
            BinaryOperator::AtArrow => f.write_str("@>"),
            BinaryOperator::ArrowAt => f.write_str("<@"),
            BinaryOperator::HashMinus => f.write_str("#-"),
            BinaryOperator::AtQuestion => f.write_str("@?"),
            BinaryOperator::Question => f.write_str("?"),
            BinaryOperator::QuestionAnd => f.write_str("?&"),
            BinaryOperator::QuestionPipe => f.write_str("?|"),
            BinaryOperator::PGCustomBinaryOperator(idents) => {
                write!(f, "OPERATOR({})", display_separated(idents, "."))
            }
            BinaryOperator::Overlaps => f.write_str("OVERLAPS"),
            BinaryOperator::DoubleHash => f.write_str("##"),
            BinaryOperator::LtDashGt => f.write_str("<->"),
            BinaryOperator::AndLt => f.write_str("&<"),
            BinaryOperator::AndGt => f.write_str("&>"),
            BinaryOperator::LtLtPipe => f.write_str("<<|"),
            BinaryOperator::PipeGtGt => f.write_str("|>>"),
            BinaryOperator::AndLtPipe => f.write_str("&<|"),
            BinaryOperator::PipeAndGt => f.write_str("|&>"),
            BinaryOperator::LtCaret => f.write_str("<^"),
            BinaryOperator::GtCaret => f.write_str(">^"),
            BinaryOperator::QuestionHash => f.write_str("?#"),
            BinaryOperator::QuestionDash => f.write_str("?-"),
            BinaryOperator::QuestionDashPipe => f.write_str("?-|"),
            BinaryOperator::QuestionDoublePipe => f.write_str("?||"),
            BinaryOperator::At => f.write_str("@"),
            BinaryOperator::TildeEq => f.write_str("~="),
            BinaryOperator::Assignment => f.write_str(":="),
        }
    }
}
