import enum
from datetime import datetime

from sqlalchemy import String, DateTime, Enum, Boolean, Integer, Text
from sqlalchemy.orm import mapped_column, Mapped

from src.database import Base


class AuthTypeEnum(str, enum.Enum):
    phone = "phone"
    google = "google"

class Customer(Base):
    __tablename__ = "customer"

    customer_id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
    name: Mapped[str] = mapped_column(String(255), nullable=False)
    phone: Mapped[int] = mapped_column(String(55), nullable=False)
    email: Mapped[int] = mapped_column(String(55), nullable=True, unique=True)
    password: Mapped[str] = mapped_column(String(255), nullable=False)
    comment: Mapped[str] = mapped_column(String(1024), nullable=True)
    logo: Mapped[str] = mapped_column(String(255), nullable=True)

    date_added: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
    date_modify: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)

    ip: Mapped[str] = mapped_column(String(75), nullable=True)
    auth_type: Mapped[AuthTypeEnum] = mapped_column(Enum(AuthTypeEnum), nullable=False, default=AuthTypeEnum.phone)
    banned: Mapped[bool] = mapped_column(Boolean, default=False)

class GoogleToken(Base):
    __tablename__ = "google_token"

    google_token_id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
    access_token: Mapped[str] = mapped_column(String(255), nullable=False)
    expires_in: Mapped[int] = mapped_column(Integer, nullable=False)
    refresh_token: Mapped[str] = mapped_column(String(255), nullable=False)
    scope: Mapped[str] = mapped_column(String(255), nullable=False)
    token_type: Mapped[str] = mapped_column(String(255), nullable=False)
    id_token: Mapped[str] = mapped_column(Text, nullable=False)
    date_added: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
    customer_id: Mapped[int] = mapped_column(Integer, nullable=False)