package com.carmaintenance.entity;

import lombok.Data;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 维保工单实体
 */
@Data
@Entity
@Table(name = "service_orders")
@EntityListeners(AuditingEntityListener.class)
public class ServiceOrder {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "order_id")
    private Integer orderId;

    @Column(name = "order_no", nullable = false, unique = true, length = 50)
    private String orderNo;

    @Column(name = "vehicle_id", nullable = false)
    private Integer vehicleId;

    @Column(name = "customer_id", nullable = false)
    private Integer customerId;

    @Enumerated(EnumType.STRING)
    @Column(name = "service_type", nullable = false)
    private ServiceType serviceType;

    @Column(name = "appointment_time")
    private LocalDateTime appointmentTime;

    @Column(name = "arrival_time")
    private LocalDateTime arrivalTime;

    @Column(name = "start_time")
    private LocalDateTime startTime;

    @Column(name = "complete_time")
    private LocalDateTime completeTime;

    @Column(name = "staff_id")
    private Integer staffId;

    @Column(name = "current_mileage", precision = 10, scale = 2)
    private BigDecimal currentMileage;

    @Column(name = "fault_description", columnDefinition = "TEXT")
    private String faultDescription;

    @Column(name = "diagnosis_result", columnDefinition = "TEXT")
    private String diagnosisResult;

    @Column(name = "service_items", columnDefinition = "TEXT")
    private String serviceItems;

    @Column(name = "parts_cost", precision = 10, scale = 2)
    private BigDecimal partsCost = BigDecimal.ZERO;

    @Column(name = "labor_cost", precision = 10, scale = 2)
    private BigDecimal laborCost = BigDecimal.ZERO;

    @Column(name = "total_cost", precision = 10, scale = 2)
    private BigDecimal totalCost = BigDecimal.ZERO;

    @Enumerated(EnumType.STRING)
    @Column(name = "status")
    private OrderStatus status = OrderStatus.pending;

    @Enumerated(EnumType.STRING)
    @Column(name = "payment_status")
    private PaymentStatus paymentStatus = PaymentStatus.unpaid;

    @Column(name = "remark", columnDefinition = "TEXT")
    private String remark;

    @CreatedDate
    @Column(name = "create_time", updatable = false)
    private LocalDateTime createTime;

    @LastModifiedDate
    @Column(name = "update_time")
    private LocalDateTime updateTime;

    public enum ServiceType {
        maintenance, repair, beauty, insurance
    }

    public enum OrderStatus {
        pending, appointed, in_progress, completed, cancelled
    }

    public enum PaymentStatus {
        unpaid, paid, refunded
    }
}
