from sqlalchemy import Integer, String, Float
from app.models.main import Base
from sqlalchemy.orm import Mapped, mapped_column
from pydantic import BaseModel
from typing import Optional

class MainDataSchema(BaseModel):
    data_id:Optional[int]
    category_identifier: Optional[str]
    format_type: Optional[str]
    reference_retailer: Optional[str]
    no_of_stores: Optional[int]
    description: Optional[str]
    no_of_cats_l: Optional[int]
    no_of_cats_m: Optional[int]
    no_of_cats_h: Optional[int]
    indicative_size: Optional[int]
    capital_available: Optional[float]
    approx_investment: Optional[float]
    comp_intensity_l: Optional[float]
    comp_intensity_m: Optional[float]
    comp_intensity_h: Optional[float]
    tech_inv_h: Optional[int]
    tech_inv_m: Optional[int]
    tech_inv_l: Optional[int]
    spillage_h: Optional[float]
    spillage_l: Optional[int]
    services_h: Optional[int]
    services_m: Optional[int]
    services_l: Optional[int]


class TblMainData(Base):
    __tablename__ = "tbl_main_data"

    data_id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
    category_identifier: Mapped[str] = mapped_column(String(10),nullable=True)
    format_type: Mapped[str] = mapped_column(String(100),nullable=True)
    reference_retailer: Mapped[str] = mapped_column(String(255),nullable=True)
    no_of_stores: Mapped[int] = mapped_column(Integer,nullable=True)
    description: Mapped[str] = mapped_column(String(1000),nullable=True)
    
    no_of_cats_l: Mapped[int] = mapped_column(Integer,nullable=True)
    no_of_cats_m: Mapped[int] = mapped_column(Integer,nullable=True)
    no_of_cats_h: Mapped[int] = mapped_column(Integer,nullable=True)
    
    indicative_size: Mapped[int] = mapped_column(Integer,nullable=True)
    capital_available: Mapped[float] = mapped_column(Float,nullable=True)
    approx_investment: Mapped[float] = mapped_column(Float,nullable=True)
    
    comp_intensity_l: Mapped[float] = mapped_column(Float,nullable=True)
    comp_intensity_m: Mapped[float] = mapped_column(Float,nullable=True)
    comp_intensity_h: Mapped[float] = mapped_column(Float,nullable=True)

    tech_inv_h: Mapped[int] = mapped_column(Integer,nullable=True)
    tech_inv_m: Mapped[int] = mapped_column(Integer,nullable=True)
    tech_inv_l: Mapped[int] = mapped_column(Integer,nullable=True)

    spillage_h: Mapped[float] = mapped_column(Float,nullable=True)
    spillage_l: Mapped[float] = mapped_column(Float,nullable=True)

    services_h: Mapped[int] = mapped_column(Integer,nullable=True)
    services_m: Mapped[int] = mapped_column(Integer,nullable=True)
    services_l: Mapped[int] = mapped_column(Integer,nullable=True)

