"""
Company-related database models
"""
from sqlalchemy import Column, Integer, BigInteger, String, Boolean, DateTime, Text, ForeignKey, Time
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from sqlalchemy.dialects.postgresql import UUID as PG_UUID
import uuid
from app.db.session import Base


class Company(Base):
    __tablename__ = "companies"

    company_id = Column(PG_UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, index=True)
    company_name = Column(String(150), nullable=False)
    address = Column(String(250), nullable=False)
    country_id = Column(Integer, ForeignKey("countries.country_id"))
    province = Column(String(50), nullable=False)
    city = Column(String(50), nullable=False)
    postal_code = Column(String(10), nullable=False)
    phone = Column(String(50), nullable=False)
    mobile = Column(String(50))
    fax = Column(String(50))
    email = Column(String(50), nullable=False)
    registration_number = Column(String(50))
    vat_number = Column(String(50))
    tax_office = Column(String(50))
    website = Column(String(50))
    create_date = Column(DateTime(timezone=True), server_default=func.now())
    update_date = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
    remarks = Column(Text)
    company_logo_path = Column(String(1000))
    company_status = Column(String(20), default='pending')  # 'pending', 'approved', 'rejected', 'suspended'
    send_time_reports = Column(Time, default='09:00:00')

    # Relationships
    country = relationship("Country", back_populates="companies")
    user_companies = relationship("UserCompany", back_populates="company")
    beach_places = relationship("BeachPlace", back_populates="company")
    restaurants = relationship("Restaurant", back_populates="company")
    markets = relationship("Market", back_populates="company")
    adventures = relationship("Adventure", back_populates="company")


class UserCompany(Base):
    __tablename__ = "user_companies"

    user_company_id = Column(BigInteger, primary_key=True, index=True)
    user_id = Column(PG_UUID(as_uuid=True), ForeignKey("users.user_id"))
    company_id = Column(PG_UUID(as_uuid=True), ForeignKey("companies.company_id"))
    role = Column(String(30), default='owner')  # 'owner', 'manager', 'employee'
    is_active = Column(Boolean, default=True)
    created_at = Column(DateTime(timezone=True), server_default=func.now())

    # Relationships
    user = relationship("User", back_populates="user_companies")
    company = relationship("Company", back_populates="user_companies")

    __table_args__ = (
        {"extend_existing": True},
    )