// // TimerSettingsView.swift // Keging // // 세팅 — 수축·이완 시간, 횟수, 진동 패턴 // import SwiftUI struct TimerSettingsView: View { @EnvironmentObject private var settings: SettingsStore @Environment(\.dismiss) private var dismiss var body: some View { NavigationStack { Form { Section { Stepper(value: $settings.config.contractSeconds, in: 1...60) { LabeledContent("수축", value: String(localized: "\(settings.config.contractSeconds)초")) } Stepper(value: $settings.config.relaxSeconds, in: 1...60) { LabeledContent("이완", value: String(localized: "\(settings.config.relaxSeconds)초")) } Stepper(value: $settings.config.reps, in: 1...100) { LabeledContent("횟수", value: String(localized: "\(settings.config.reps)회")) } } header: { Text("사이클") } footer: { Text("수축 → 이완을 \(settings.config.reps)회 반복해요. 한 세트 약 \(durationText).") } Section { Picker("수축 진동", selection: $settings.config.contractPattern) { ForEach(HapticPattern.allCases) { Text($0.label).tag($0) } } Picker("이완 진동", selection: $settings.config.relaxPattern) { ForEach(HapticPattern.allCases) { Text($0.label).tag($0) } } Button("수축 진동 미리 느끼기") { Haptics.play(settings.config.contractPattern) } Button("이완 진동 미리 느끼기") { Haptics.play(settings.config.relaxPattern) } } header: { Text("진동 패턴") } footer: { Text("수축과 이완의 진동이 달라 화면을 보지 않아도 구분할 수 있어요. 진동은 실기기에서만 느껴져요.") } } .navigationTitle("운동 세팅") .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .confirmationAction) { Button("완료") { dismiss() } } } } } private var durationText: String { let total = Int(settings.config.totalDuration) let minutes = total / 60 let seconds = total % 60 if minutes == 0 { return String(localized: "\(seconds)초") } if seconds == 0 { return String(localized: "\(minutes)분") } return String(localized: "\(minutes)분 \(seconds)초") } }