query listApplications @auth(level: USER) {
  applications {
    id
    shiftId
    staffId
    status
    appliedAt
    checkInTime
    checkOutTime
    origin
    createdAt

    shift {
      id
      title
      date
      startTime
      endTime
      location
      status

      order {
        id
        eventName
        #location

        teamHub {
          address
          placeId
          hubName
        }
      
        business {
          id
          businessName
          email
          contactName
        }
        vendor {
          id
          companyName
        }
      }

    }

    shiftRole {
      id
      roleId
      count
      assigned
      startTime
      endTime
      hours
      breakType
      isBreakPaid
      totalValue
      role {
        id
        name
        costPerHour
      }
    }
  }
}

query getApplicationById($id: UUID!) @auth(level: USER) {
  application(id: $id) {
    id
    shiftId
    staffId
    status
    appliedAt
    checkInTime
    checkOutTime
    origin
    createdAt
    shift {
      id
      title
      date
      startTime
      endTime
      location
      status

      order {
        id
        eventName
        #location

        teamHub {
          address
          placeId
          hubName
        }
      
        business {
          id
          businessName
          email
          contactName
        }
        vendor {
          id
          companyName
        }
      }

    }

    shiftRole {
      id
      roleId
      count
      assigned
      startTime
      endTime
      hours
      totalValue
      role {
        id
        name
        costPerHour
      }
    }
  }
}

query getApplicationsByShiftId($shiftId: UUID!) @auth(level: USER) {
  applications(where: { shiftId: { eq: $shiftId } }) {
    id
    shiftId
    staffId
    status
    appliedAt
    checkInTime
    checkOutTime
    origin
    createdAt

    shift {
      id
      title
      date
      startTime
      endTime
      location
      status

      order {
        id
        eventName
        #location

        teamHub {
          address
          placeId
          hubName
        }
      
        business {
          id
          businessName
          email
          contactName
        }
        vendor {
          id
          companyName
        }
      }

    }

    shiftRole {
      id
      roleId
      count
      assigned
      startTime
      endTime
      hours
      totalValue
      role {
        id
        name
        costPerHour
      }
    }

  }
}

query getApplicationsByShiftIdAndStatus(
  $shiftId: UUID!
  $status: ApplicationStatus!
  $offset: Int
  $limit: Int
) @auth(level: USER) {
  applications(
    where: {
      shiftId: { eq: $shiftId }
      status: { eq: $status }
    }
    offset: $offset
    limit: $limit
  ) {
    id
    shiftId
    staffId
    status
    appliedAt
    checkInTime
    checkOutTime
    origin
    createdAt

    shift {
      id
      title
      date
      startTime
      endTime
      location
      status

      order {
        id
        eventName
        #location

        teamHub {
          address
          placeId
          hubName
        }
      
        business {
          id
          businessName
          email
          contactName
        }
        vendor {
          id
          companyName
        }
      }
    }

    shiftRole {
      id
      roleId
      count
      assigned
      startTime
      endTime
      hours
      totalValue
      role {
        id
        name
        costPerHour
      }
    }
  }
}

query getApplicationsByStaffId(
  $staffId: UUID!
  $offset: Int
  $limit: Int
  $dayStart: Timestamp
  $dayEnd: Timestamp
) @auth(level: USER) {
  applications(
    where: { 
      staffId: { eq: $staffId } 
      status: { in: [ CONFIRMED, CHECKED_IN, CHECKED_OUT, LATE] }
      shift: {
        date: { ge: $dayStart, le: $dayEnd }
      }
    
    }
    offset: $offset
    limit: $limit
  ) {
    id
    shiftId
    staffId
    status
    appliedAt
    checkInTime
    checkOutTime
    origin
    createdAt

    shift {
      id
      title
      date
      startTime
      endTime
      location
      status
      durationDays
      description
      latitude
      longitude

      order {
        id
        eventName
        #location

        teamHub {
          address
          placeId
          hubName
        }
      
        business {
          id
          businessName
          email
          contactName
          companyLogoUrl
        }
        vendor {
          id
          companyName
        }
      }

    }

    shiftRole {
      id
      roleId
      count
      assigned
      startTime
      endTime
      hours
      breakType
      isBreakPaid
      totalValue
      role {
        id
        name
        costPerHour
      }
    }

  }
}

query vaidateDayStaffApplication(
  $staffId: UUID!
  $offset: Int
  $limit: Int
  $dayStart: Timestamp
  $dayEnd: Timestamp
) @auth(level: USER) {
  applications(
    where: { 
      staffId: { eq: $staffId } 
      shift: {
        date: { ge: $dayStart, le: $dayEnd }
      }
    
    }
    offset: $offset
    limit: $limit
  ) {
    id
    shiftId
    staffId
    status
    appliedAt
    checkInTime
    checkOutTime
    origin
    createdAt

    shift {
      id
      title
      date
      startTime
      endTime
      location
      status
      durationDays
      description

      order {
        id
        eventName
        #location

        teamHub {
          address
          placeId
          hubName
        }
      
        business {
          id
          businessName
          email
          contactName
          companyLogoUrl
        }
        vendor {
          id
          companyName
        }
      }

    }

    shiftRole {
      id
      roleId
      count
      assigned
      startTime
      endTime
      hours
      totalValue
      role {
        id
        name
        costPerHour
      }
    }

  }
}

#validation before apply 
query getApplicationByStaffShiftAndRole(
  $staffId: UUID!
  $shiftId: UUID!
  $roleId: UUID!
  $offset: Int
  $limit: Int
) @auth(level: USER) {
  applications(
    where: {
      staffId: { eq: $staffId }
      shiftId: { eq: $shiftId }
      shiftRole: { roleId: { eq: $roleId } }
    }
    offset: $offset
    limit: $limit
  ) {
    id
    shiftId
    staffId
    status
    appliedAt
    checkInTime
    checkOutTime
    origin
    createdAt

    shift {
      id
      title
      date
      startTime
      endTime
      location
      status

      order {
        id
        eventName

        teamHub {
          address
          placeId
          hubName
        }

        business {
          id
          businessName
          email
          contactName
          companyLogoUrl
        }
        vendor {
          id
          companyName
        }
      }
    }

    shiftRole {
      id
      roleId
      count
      assigned
      startTime
      endTime
      hours
      totalValue
      role {
        id
        name
        costPerHour
      }
    }
  }
}


#getting staffs of an shiftrole CONFIRMED for orders view client
query listAcceptedApplicationsByShiftRoleKey(
  $shiftId: UUID!
  $roleId: UUID!
  $offset: Int
  $limit: Int
) @auth(level: USER) {
  applications(
    where: {
      shiftId: { eq: $shiftId }
      roleId: { eq: $roleId }
      status: { eq: CONFIRMED }
    }
    offset: $offset
    limit: $limit
    orderBy: { appliedAt: ASC }
  ) {
    id
    checkInTime
    checkOutTime
    staff { id fullName email phone photoUrl }
  }
}

#getting staffs of an shiftrole status for orders of the day view client 
query listAcceptedApplicationsByBusinessForDay(
  $businessId: UUID!
  $dayStart: Timestamp!
  $dayEnd: Timestamp!
  $offset: Int
  $limit: Int
) @auth(level: USER) {
  applications(
    where: {
      status: { in: [ CONFIRMED, CHECKED_IN, CHECKED_OUT, LATE] }
      staff: { isProfileVisible: { eq: true } }
      shift: {
        date: { ge: $dayStart, le: $dayEnd }
        order: { businessId: { eq: $businessId } }
      }
    }
    offset: $offset
    limit: $limit
    orderBy: { appliedAt: ASC }
  ) {
    id
    shiftId
    roleId
    checkInTime
    checkOutTime
    appliedAt
    staff { id fullName email phone photoUrl averageRating }
  }
}

#coverage list and today live
query listStaffsApplicationsByBusinessForDay(
  $businessId: UUID!
  $dayStart: Timestamp!
  $dayEnd: Timestamp!
  $offset: Int
  $limit: Int
) @auth(level: USER) {
  applications(
    where: {
      status: {in: [ CONFIRMED, CHECKED_IN, CHECKED_OUT, LATE]}
      staff: { isProfileVisible: { eq: true } }
      shift: {
        date: { ge: $dayStart, le: $dayEnd }
        order: { businessId: { eq: $businessId } }
      }
    }
    offset: $offset
    limit: $limit
    orderBy: { appliedAt: ASC }
  ) {
    id
    shiftId
    roleId
    checkInTime
    checkOutTime
    appliedAt
    status

    shiftRole {
      startTime
      shift {
        date
        location
        locationAddress
        cost
      }
      count
      assigned
      hours
      
      role {
        name
      }
    }
    staff { id fullName email phone photoUrl }
  }
}



# ==========================================================
# COMPLETED APPLICATIONS BY STAFF (same payload as
# getApplicationByStaffShiftAndRole)
# ==========================================================
query listCompletedApplicationsByStaffId(
  $staffId: UUID!
  $offset: Int
  $limit: Int
) @auth(level: USER) {
  applications(
    where: {
      staffId: { eq: $staffId }
      status: { eq: COMPLETED }
    }
    offset: $offset
    limit: $limit
    orderBy: { appliedAt: DESC }
  ) {
    id
    shiftId
    staffId
    status
    appliedAt
    checkInTime
    checkOutTime
    origin
    createdAt

    shift {
      id
      title
      date
      startTime
      endTime
      location
      status
      description
      durationDays
      latitude
      longitude

      order {
        id
        eventName

        teamHub {
          address
          placeId
          hubName
        }

        business {
          id
          businessName
          email
          contactName
          companyLogoUrl
        }

        vendor {
          id
          companyName
        }
      }
    }

    shiftRole {
      id
      roleId
      count
      assigned
      startTime
      endTime
      hours
      breakType
      isBreakPaid
      totalValue

      role {
        id
        name
        costPerHour
      }
    }
  }
}
