from app.extensions import db
from .base import TimestampMixin, SoftDeleteMixin


class City(TimestampMixin, SoftDeleteMixin, db.Model):
    __tablename__ = "cities"
    id = db.Column(db.Integer, primary_key=True)
    code = db.Column(db.String(20), unique=True, nullable=False)
    name = db.Column(db.String(100), nullable=False)
    state_name = db.Column(db.String(100))
    launch_eligible = db.Column(db.Boolean, nullable=False, default=False)


class Location(TimestampMixin, SoftDeleteMixin, db.Model):
    __tablename__ = "locations"
    id = db.Column(db.Integer, primary_key=True)
    city_id = db.Column(db.Integer, db.ForeignKey("cities.id"), nullable=False)
    name = db.Column(db.String(150), nullable=False)
    address = db.Column(db.String(500))
    latitude = db.Column(db.Numeric(10, 7))
    longitude = db.Column(db.Numeric(10, 7))

    city = db.relationship("City")


class Department(TimestampMixin, SoftDeleteMixin, db.Model):
    __tablename__ = "departments"
    id = db.Column(db.Integer, primary_key=True)
    code = db.Column(db.String(50), unique=True, nullable=False)
    name = db.Column(db.String(150), nullable=False)


class BusinessUnit(TimestampMixin, SoftDeleteMixin, db.Model):
    __tablename__ = "business_units"
    id = db.Column(db.Integer, primary_key=True)
    code = db.Column(db.String(50), unique=True, nullable=False)
    name = db.Column(db.String(150), nullable=False)


class Designation(TimestampMixin, SoftDeleteMixin, db.Model):
    __tablename__ = "designations"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(150), unique=True, nullable=False)


class CauseCategory(TimestampMixin, SoftDeleteMixin, db.Model):
    __tablename__ = "cause_categories"
    id = db.Column(db.Integer, primary_key=True)
    code = db.Column(db.String(50), unique=True, nullable=False)
    name = db.Column(db.String(150), nullable=False)
    description = db.Column(db.String(500))


class ActivityType(TimestampMixin, SoftDeleteMixin, db.Model):
    __tablename__ = "activity_types"
    id = db.Column(db.Integer, primary_key=True)
    code = db.Column(db.String(50), unique=True, nullable=False)
    name = db.Column(db.String(150), nullable=False)


class Partner(TimestampMixin, SoftDeleteMixin, db.Model):
    __tablename__ = "partners"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255), nullable=False)
    partner_type = db.Column(db.String(50), nullable=False, default="NGO")
    registration_number = db.Column(db.String(100))
    contact_name = db.Column(db.String(150))
    contact_email = db.Column(db.String(255))
    contact_phone = db.Column(db.String(30))
    website = db.Column(db.String(255))
