enum userType {
  customer
  mover
}

enum Platform {
  google
  kakao
  naver
}

enum NotificationType {
  newEstimate
  request
  confirmed
}

model User {
  id              String @id @default(uuid())
  userType        userType @default(customer)
  name            String
  email           String @unique
  password        String 
  phoneNumber     String @unique
  createdAt       DateTime @default(now())
  updatedAt       DateTime @updatedAt
  @@unique([phoneNumber, userType])
  
  customer        Customer? 
  mover           Mover?
  socialLogins SocialLogin[]
  notifications Notification[]
  
}

model Customer {
  id              String @id @default(uuid())
  profileImg      String
  career          String

  userId          String @unique
  user            User @relation(fields: [userId], references: [id])
  requests   EstimateRequest[]
  favorites  Favorite[]
  
}

model Mover {
  id           String   @id @default(uuid())
  userId       String   @unique
  img          String
  career       String
  oneLiner     String
  introduction String
  serviceType  String[]
  serviceArea  String[]

  user        User     @relation(fields: [userId], references: [id], onDelete: Cascade)
  estimates   Estimate[]
  favorites   Favorite[]
}
model Estimate {
  id        String   @id @default(uuid())
  moverId   String
  requestId String
  price     String
  comment   String

  mover     Mover    @relation(fields: [moverId], references: [id], onDelete: Cascade)
  request   EstimateRequest @relation(fields: [requestId], references: [id], onDelete: Cascade)
  confirmed ConfirmedEstimate[]
}

 
model EstimateRequest {
  id                 String   @id @default(uuid())
  customerId         String
  type               String
  date               String
  departures         String
  departuresDetail   String
  arrivals          String
  arrivalsDetail    String
  isDesignated      Boolean
  createdAt         DateTime @default(now())

  customer          Customer @relation(fields: [customerId], references: [id], onDelete: Cascade)
  estimates        Estimate[]
}

model ConfirmedEstimate {
  id           String   @id @default(uuid())
  estimateId   String
  createdAt    DateTime @default(now())

  estimate     Estimate @relation(fields: [estimateId], references: [id], onDelete: Cascade)
  reviews      Review[]
}

model Favorite {
  id        String   @id @default(uuid())
  moverId   String
  customerId String
  createdAt DateTime @default(now())

  mover     Mover    @relation(fields: [moverId], references: [id], onDelete: Cascade)
  customer  Customer @relation(fields: [customerId], references: [id], onDelete: Cascade)
}

model SocialLogin {
  id         String   @id @default(uuid())
  userId     String
  platform   Platform
  platformId String
  createdAt  DateTime @default(now())

  user       User     @relation(fields: [userId], references: [id], onDelete: Cascade)
}

model Review {
  id          String   @id @default(uuid())
  confirmedEstimateId String
  score       Int
  review      String
  createdAt   DateTime @default(now())

  confirmedEstimate ConfirmedEstimate @relation(fields: [confirmedEstimateId], references: [id], onDelete: Cascade)
}

model Notification {
  id        String   @id @default(uuid())
  userId    String
  isRead    Boolean
  type      NotificationType

  user      User     @relation(fields: [userId], references: [id], onDelete: Cascade)
}