"""
성능점검표 (Performance Check Report) 모델
카모두에서 가져온 차량 성능점검 정보를 저장
"""

from sqlalchemy import Column, Integer, String, Boolean, ForeignKey, DateTime, Text, JSON
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from ..database import Base


class CarPerformanceCheck(Base):
    """차량 성능점검표"""
    __tablename__ = "car_performance_checks"

    id = Column(Integer, primary_key=True, index=True)
    car_id = Column(Integer, ForeignKey("cars.id", ondelete="CASCADE"), nullable=False, unique=True)

    # 성능점검 기본정보
    check_number = Column(String(50))  # 성능점검번호
    check_date = Column(String(20))  # 점검일자
    valid_until = Column(String(20))  # 유효기간
    inspector_name = Column(String(50))  # 점검자명
    inspector_license = Column(String(50))  # 점검자 자격번호

    # 차량 기본정보 (car_number는 cars 테이블에서 관리 - 원자성)
    first_registration = Column(String(20))  # 최초등록일
    model_year = Column(String(20))  # 연식

    # 주행거리
    mileage = Column(Integer)  # 주행거리
    mileage_status = Column(String(20))  # 주행거리 상태 (정상/조작의심/교환됨)

    # 압류/저당 정보
    seize_count = Column(Integer, default=0)  # 압류 건수
    collateral_count = Column(Integer, default=0)  # 저당 건수

    # 특별 이력 (침수/화재/전손)
    is_flood_damaged = Column(Boolean, default=False)  # 침수
    is_fire_damaged = Column(Boolean, default=False)  # 화재
    is_total_loss = Column(Boolean, default=False)  # 전손

    # 용도이력
    usage_history = Column(String(100))  # 자가용/영업용/관용 등
    is_rental_used = Column(Boolean, default=False)  # 렌트 이력

    # 주요장치 상태 (JSON으로 상세정보 저장)
    # 각 항목: 양호/주의/불량
    engine_status = Column(String(20))  # 원동기
    transmission_status = Column(String(20))  # 변속기
    power_delivery_status = Column(String(20))  # 동력전달
    steering_status = Column(String(20))  # 조향장치
    brake_status = Column(String(20))  # 제동장치
    electrical_status = Column(String(20))  # 전기장치
    fuel_system_status = Column(String(20))  # 연료장치

    # 타이어 상태
    tire_front_left = Column(String(20))  # 전좌
    tire_front_right = Column(String(20))  # 전우
    tire_rear_left = Column(String(20))  # 후좌
    tire_rear_right = Column(String(20))  # 후우

    # 사고 이력 (외판/주요골격) - JSON으로 상세 저장
    # 부위별: 없음/교환/판금용접/부식/손상
    accident_history = Column(JSON)  # {"hood": "교환", "front_fender_left": "판금", ...}

    # 외판 부위
    hood = Column(String(20))  # 후드
    front_fender_left = Column(String(20))  # 프론트휀더(좌)
    front_fender_right = Column(String(20))  # 프론트휀더(우)
    front_door_left = Column(String(20))  # 프론트도어(좌)
    front_door_right = Column(String(20))  # 프론트도어(우)
    rear_door_left = Column(String(20))  # 리어도어(좌)
    rear_door_right = Column(String(20))  # 리어도어(우)
    trunk_lid = Column(String(20))  # 트렁크리드
    radiator_support = Column(String(20))  # 라디에이터서포트
    roof_panel = Column(String(20))  # 루프패널
    quarter_panel_left = Column(String(20))  # 쿼터패널(좌)
    quarter_panel_right = Column(String(20))  # 쿼터패널(우)
    side_sill_left = Column(String(20))  # 사이드실패널(좌)
    side_sill_right = Column(String(20))  # 사이드실패널(우)

    # 주요골격 부위
    front_panel = Column(String(20))  # 프론트패널
    cross_member = Column(String(20))  # 크로스멤버
    inside_panel_left = Column(String(20))  # 인사이드패널(좌)
    inside_panel_right = Column(String(20))  # 인사이드패널(우)
    side_member_left = Column(String(20))  # 사이드멤버(좌)
    side_member_right = Column(String(20))  # 사이드멤버(우)
    wheel_house_left = Column(String(20))  # 휠하우스(좌)
    wheel_house_right = Column(String(20))  # 휠하우스(우)
    dash_panel = Column(String(20))  # 대쉬패널
    floor_panel = Column(String(20))  # 플로어패널
    trunk_floor = Column(String(20))  # 트렁크플로어
    rear_panel = Column(String(20))  # 리어패널
    pillar_a_left = Column(String(20))  # 필러A(좌)
    pillar_a_right = Column(String(20))  # 필러A(우)
    pillar_b_left = Column(String(20))  # 필러B(좌)
    pillar_b_right = Column(String(20))  # 필러B(우)
    pillar_c_left = Column(String(20))  # 필러C(좌)
    pillar_c_right = Column(String(20))  # 필러C(우)
    package_tray = Column(String(20))  # 패키지트레이

    # 원본 데이터 (파싱하지 못한 추가 정보)
    raw_data = Column(JSON)  # 전체 원본 데이터
    raw_html = Column(Text)  # 원본 HTML (디버깅용)

    # 점검표 이미지 URL
    report_image_url = Column(String(500))  # 성능점검표 이미지
    report_image_local = Column(String(500))  # 로컬 저장 경로

    # PDF 파일 경로 (Playwright로 캡처한 성능점검표)
    pdf_path = Column(String(500))  # PDF 파일 상대경로 (/uploads/performance_checks/xxx.pdf)

    created_at = Column(DateTime(timezone=True), server_default=func.now())
    updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())

    # Relationship
    car = relationship("Car", back_populates="performance_check")
