import WidgetKit
import SwiftUI

struct Provider: TimelineProvider {
    func placeholder(in context: Context) -> SimpleEntry {
        SimpleEntry(date: Date())
    }

    func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
        completion(SimpleEntry(date: Date()))
    }

    func getTimeline(in context: Context, completion: @escaping (Timeline<SimpleEntry>) -> ()) {
        // V1：写死内容，不做数据更新；给一个很长的刷新间隔（系统仍可能自行调度）
        let entry = SimpleEntry(date: Date())
        let nextUpdate = Calendar.current.date(byAdding: .day, value: 7, to: Date()) ?? Date().addingTimeInterval(60 * 60 * 24 * 7)
        completion(Timeline(entries: [entry], policy: .after(nextUpdate)))
    }
}

struct SimpleEntry: TimelineEntry {
    let date: Date
}

struct MindfulnessWidgetEntryView: View {
    var entry: Provider.Entry
    @Environment(\.widgetFamily) var family

    private let title = "正念"
    private let text = "你已经很努力了，今天也值得被温柔对待。"
    private let deepLink = URL(string: "client:///(app)/home")

    var body: some View {
        switch family {
        case .systemSmall:
            smallView()
        case .systemMedium:
            mediumView()
        case .systemLarge:
            largeView()
        default:
            smallView()
        }
    }

    private func smallView() -> some View {
        ZStack {
            LinearGradient(
                colors: [Color(red: 0.07, green: 0.09, blue: 0.13), Color(red: 0.15, green: 0.18, blue: 0.26)],
                startPoint: .topLeading,
                endPoint: .bottomTrailing
            )
            VStack(alignment: .leading, spacing: 8) {
                Text(title).font(.headline).foregroundStyle(.white)
                Text(text)
                    .font(.system(size: 14, weight: .semibold))
                    .foregroundStyle(Color.white.opacity(0.92))
                    .lineLimit(4)
                Spacer(minLength: 0)
            }
            .padding(14)
        }
        .widgetURL(deepLink)
    }

    private func mediumView() -> some View {
        ZStack {
            LinearGradient(
                colors: [Color(red: 0.07, green: 0.09, blue: 0.13), Color(red: 0.10, green: 0.12, blue: 0.18)],
                startPoint: .topLeading,
                endPoint: .bottomTrailing
            )
            HStack(spacing: 14) {
                VStack(alignment: .leading, spacing: 8) {
                    Text(title).font(.headline).foregroundStyle(.white)
                    Text(text)
                        .font(.system(size: 16, weight: .semibold))
                        .foregroundStyle(Color.white.opacity(0.92))
                        .lineLimit(5)
                    Spacer(minLength: 0)
                }
                Spacer(minLength: 0)
            }
            .padding(16)
        }
        .widgetURL(deepLink)
    }

    private func largeView() -> some View {
        ZStack {
            LinearGradient(
                colors: [Color(red: 0.07, green: 0.09, blue: 0.13), Color(red: 0.17, green: 0.22, blue: 0.32)],
                startPoint: .topLeading,
                endPoint: .bottomTrailing
            )
            VStack(alignment: .leading, spacing: 12) {
                Text(title)
                    .font(.title3)
                    .foregroundStyle(.white)
                    .bold()
                Text(text)
                    .font(.system(size: 18, weight: .semibold))
                    .foregroundStyle(Color.white.opacity(0.92))
                    .lineLimit(7)
                Spacer(minLength: 0)
                Text("轻轻呼吸，回到当下")
                    .font(.footnote)
                    .foregroundStyle(Color.white.opacity(0.7))
            }
            .padding(18)
        }
        .widgetURL(deepLink)
    }
}

struct MindfulnessWidget: Widget {
    let kind: String = "MindfulnessWidget"

    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            MindfulnessWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("正念")
        .description("一段温柔提醒，陪你回到当下。")
        .supportedFamilies([.systemSmall, .systemMedium, .systemLarge])
    }
}

