package com.evseminar.model;

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.SQLRestriction;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Entity
@Table(name = "vehicle")
@SQLRestriction("deleted_at IS NULL")
@Getter @Setter
@NoArgsConstructor @AllArgsConstructor
@Builder
public class Vehicle {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long vehicleId;

    @Column(nullable = false, unique = true, length = 50)
    private String modelNumber;

    @Column(nullable = false, length = 100)
    private String name;

    @Column(length = 100)
    private String nameZh;

    @Column(nullable = false, columnDefinition = "TEXT")
    private String description;

    @Column(columnDefinition = "TEXT")
    private String descriptionZh;

    @Column(nullable = false, length = 500)
    private String pictureUrl;

    @Column(nullable = false, precision = 12, scale = 2)
    private BigDecimal unitPrice;

    @Column(nullable = false, length = 50)
    private String vehicleType;

    @Column
    private Integer rangeKm;

    @Column(precision = 5, scale = 1)
    private java.math.BigDecimal batteryCapacityKwh;

    @Column
    private Integer chargingTimeMin;

    @Column
    private Integer horsepower;

    @Column
    private Integer topSpeedKmh;

    @Column
    private Integer seatingCapacity;

    @Column
    private Integer warrantyYears;

    @Column(nullable = false, updatable = false)
    private LocalDateTime createdAt;

    @Column
    private LocalDateTime deletedAt;

    @OneToMany(mappedBy = "vehicle", cascade = CascadeType.ALL, orphanRemoval = true)
    @OrderBy("sortOrder ASC")
    @Builder.Default
    private List<VehicleFeature> vehicleFeatures = new ArrayList<>();

    @OneToMany(mappedBy = "vehicle", cascade = CascadeType.ALL, orphanRemoval = true)
    @Builder.Default
    private List<VehicleColor> vehicleColors = new ArrayList<>();

    @OneToMany(mappedBy = "vehicle", fetch = FetchType.LAZY)
    private List<Seminar> seminars;

    @PrePersist
    protected void onCreate() {
        createdAt = LocalDateTime.now();
    }
}
