import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';

void main() {
  runApp(UnixApp());
}

class UnixApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'UNIX App',
      debugShowCheckedModeBanner: false,
      initialRoute: '/',
      routes: {
        '/': (context) => WelcomePage(),
        '/selection': (context) => SelectionPage(),
      },
      onGenerateRoute: (settings) {
        if (settings.name == '/development') {
          final args = settings.arguments as Map<String, dynamic>;
          return MaterialPageRoute(
            builder: (context) {
              return DevelopmentPage(
                selectedSubjects: args['selectedSubjects'],
              );
            },
          );
        }
        assert(false, 'Need to implement ${settings.name}');
        return null;
      },
      theme: ThemeData(
        fontFamily: 'Involve', // Set the default font family here
        // Optionally, define text themes to specify styles for different text types
        textTheme: TextTheme(
          bodyLarge: TextStyle(color: Colors.black),
          bodyMedium: TextStyle(color: Colors.black),
          // Define other text styles if needed
        ),
      ),
    );
  }
}

class WelcomePage extends StatelessWidget {
  final Color darkAccent = Color.fromARGB(255, 0, 0, 0); // Dark blue

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor:
          Color.fromARGB(255, 255, 255, 240), // Fully opaque light color
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                'Добро',
                style: TextStyle(
                    fontSize: 32,
                    color: darkAccent,
                    fontWeight: FontWeight.bold),
              ),
              Text(
                'пожаловать',
                style: TextStyle(
                    fontSize: 32,
                    color: darkAccent,
                    fontWeight: FontWeight.bold),
              ),
              Text(
                'в',
                style: TextStyle(
                    fontSize: 32,
                    color: darkAccent,
                    fontWeight: FontWeight.bold),
              ),
              Text(
                'UNIX',
                style: TextStyle(
                    fontSize: 32,
                    color: darkAccent,
                    fontWeight: FontWeight.bold),
              ),
              SizedBox(height: 16), // Added spacing for better layout
              Text(
                'Давай выберем твои предметы',
                style: TextStyle(
                  fontSize: 17,
                  color: darkAccent,
                  height: 1.5,
                ),
                textAlign: TextAlign.center, // Center the text
              ),
              SizedBox(height: 30),
              ElevatedButton(
                onPressed: () {
                  Navigator.pushNamed(context, '/selection');
                },
                child: Text(
                  'Начать',
                  style: TextStyle(
                      fontSize: 18, color: Color.fromARGB(255, 255, 255, 240)),
                ),
                style: ElevatedButton.styleFrom(
                  backgroundColor: darkAccent, // Button background color
                  padding:
                      EdgeInsets.symmetric(horizontal: 50.0, vertical: 15.0),
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(8.0),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class SelectionPage extends StatefulWidget {
  @override
  _SelectionPageState createState() => _SelectionPageState();
}

class _SelectionPageState extends State<SelectionPage> {
  final Color darkAccent = Color.fromARGB(255, 0, 0, 0); // Simple dark
  final Color darkPrimary = Color.fromARGB(
      255, 52, 49, 49); // Fully opaque dark green for inactive elements

  // State variables for switches
  bool russianSelected = false;
  bool mathSelected = false;
  bool informaticsSelected = false;
  bool physicsSelected = false;
  bool obshestvoSelected = false;
  bool englishSelected = false;
  bool chemistrySelected = false;
  bool literatureSelected = false;
  bool historySelected = false;
  bool biologySelected = false;

  // Controllers for text fields
  TextEditingController russianController = TextEditingController(text: '50');
  TextEditingController mathController = TextEditingController(text: '50');
  TextEditingController informaticsController =
      TextEditingController(text: '50');
  TextEditingController physicsController = TextEditingController(text: '50');
  TextEditingController obshestvoController = TextEditingController(text: '50');
  TextEditingController englishController = TextEditingController(text: '50');
  TextEditingController chemistryController = TextEditingController(text: '50');
  TextEditingController literatureController =
      TextEditingController(text: '50');
  TextEditingController historyController = TextEditingController(text: '50');
  TextEditingController biologyController = TextEditingController(text: '50');

  @override
  void dispose() {
    russianController.dispose();
    mathController.dispose();
    informaticsController.dispose();
    physicsController.dispose();
    obshestvoController.dispose();
    englishController.dispose();
    chemistryController.dispose();
    literatureController.dispose();
    historyController.dispose();
    biologyController.dispose();
    super.dispose();
  }

  // Method to collect selected subjects and their scores
  Map<String, double> _getSelectedSubjects() {
    Map<String, double> selected = {};
    if (russianSelected) {
      double value = double.tryParse(russianController.text) ?? 0;
      selected['Русский'] = value;
    }
    if (mathSelected) {
      double value = double.tryParse(mathController.text) ?? 0;
      selected['Математика'] = value;
    }
    if (informaticsSelected) {
      double value = double.tryParse(informaticsController.text) ?? 0;
      selected['Информатика'] = value;
    }
    if (physicsSelected) {
      double value = double.tryParse(informaticsController.text) ?? 0;
      selected['Физика'] = value;
    }
    if (obshestvoSelected) {
      double value = double.tryParse(informaticsController.text) ?? 0;
      selected['Обществознание'] = value;
    }
    if (englishSelected) {
      double value = double.tryParse(informaticsController.text) ?? 0;
      selected['Английский'] = value;
    }
    if (chemistrySelected) {
      double value = double.tryParse(informaticsController.text) ?? 0;
      selected['Химия'] = value;
    }
    if (literatureSelected) {
      double value = double.tryParse(informaticsController.text) ?? 0;
      selected['Литература'] = value;
    }
    if (historySelected) {
      double value = double.tryParse(informaticsController.text) ?? 0;
      selected['История'] = value;
    }
    if (biologySelected) {
      double value = double.tryParse(informaticsController.text) ?? 0;
      selected['Биология'] = value;
    }
    return selected;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Color.fromARGB(255, 255, 255, 240), // Fully opaque white
      appBar: AppBar(
        title: Text(
          'Выбор предметов',
          style: TextStyle(color: darkAccent),
        ),
        backgroundColor:
            Color.fromARGB(255, 255, 255, 240), // Fully opaque white background
        elevation: 0, // Remove shadow
        leading: IconButton(
          icon: Icon(Icons.arrow_back, color: darkAccent),
          onPressed: () {
            Navigator.pop(context);
          },
        ),
      ),
      body: SingleChildScrollView(
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              SubjectBlock(
                title: 'Русский',
                isSelected: russianSelected,
                onToggle: (value) {
                  setState(() {
                    russianSelected = value;
                  });
                },
                controller: russianController,
                darkAccent: darkAccent,
                darkPrimary: darkPrimary,
              ),
              SizedBox(height: 20),
              SubjectBlock(
                title: 'Математика',
                isSelected: mathSelected,
                onToggle: (value) {
                  setState(() {
                    mathSelected = value;
                  });
                },
                controller: mathController,
                darkAccent: darkAccent,
                darkPrimary: darkPrimary,
              ),
              SizedBox(height: 20),
              SubjectBlock(
                title: 'Информатика',
                isSelected: informaticsSelected,
                onToggle: (value) {
                  setState(() {
                    informaticsSelected = value;
                  });
                },
                controller: informaticsController,
                darkAccent: darkAccent,
                darkPrimary: darkPrimary,
              ),
              SizedBox(height: 20),
              SubjectBlock(
                title: 'Физика',
                isSelected: physicsSelected,
                onToggle: (value) {
                  setState(() {
                    physicsSelected = value;
                  });
                },
                controller: physicsController,
                darkAccent: darkAccent,
                darkPrimary: darkPrimary,
              ),
              SizedBox(height: 20),
              SubjectBlock(
                title: 'Обществознание',
                isSelected: obshestvoSelected,
                onToggle: (value) {
                  setState(() {
                    obshestvoSelected = value;
                  });
                },
                controller: obshestvoController,
                darkAccent: darkAccent,
                darkPrimary: darkPrimary,
              ),
              SizedBox(height: 20),
              SubjectBlock(
                title: 'Английский',
                isSelected: englishSelected,
                onToggle: (value) {
                  setState(() {
                    englishSelected = value;
                  });
                },
                controller: englishController,
                darkAccent: darkAccent,
                darkPrimary: darkPrimary,
              ),
              SizedBox(height: 20),
              SubjectBlock(
                title: 'Химия',
                isSelected: chemistrySelected,
                onToggle: (value) {
                  setState(() {
                    chemistrySelected = value;
                  });
                },
                controller: chemistryController,
                darkAccent: darkAccent,
                darkPrimary: darkPrimary,
              ),
              SizedBox(height: 20),
              SubjectBlock(
                title: 'Литература',
                isSelected: literatureSelected,
                onToggle: (value) {
                  setState(() {
                    literatureSelected = value;
                  });
                },
                controller: literatureController,
                darkAccent: darkAccent,
                darkPrimary: darkPrimary,
              ),
              SizedBox(height: 20),
              SubjectBlock(
                title: 'История',
                isSelected: historySelected,
                onToggle: (value) {
                  setState(() {
                    historySelected = value;
                  });
                },
                controller: historyController,
                darkAccent: darkAccent,
                darkPrimary: darkPrimary,
              ),
              SizedBox(height: 20),
              SubjectBlock(
                title: 'Биология',
                isSelected: biologySelected,
                onToggle: (value) {
                  setState(() {
                    biologySelected = value;
                  });
                },
                controller: biologyController,
                darkAccent: darkAccent,
                darkPrimary: darkPrimary,
              ),
              SizedBox(height: 40),
              ElevatedButton(
                onPressed: () {
                  Map<String, double> selectedSubjects = _getSelectedSubjects();
                  Navigator.pushNamed(
                    context,
                    '/development',
                    arguments: {'selectedSubjects': selectedSubjects},
                  );
                },
                child: Text(
                  'Продолжить',
                  style: TextStyle(
                      fontSize: 18,
                      color: const Color.fromARGB(255, 255, 255, 255)),
                ),
                style: ElevatedButton.styleFrom(
                  backgroundColor: darkAccent, // Button background color
                  padding:
                      EdgeInsets.symmetric(horizontal: 50.0, vertical: 15.0),
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(8.0),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class SubjectBlock extends StatelessWidget {
  final String title;
  final bool isSelected;
  final Function(bool) onToggle;
  final TextEditingController controller;
  final Color darkAccent;
  final Color darkPrimary;

  SubjectBlock({
    required this.title,
    required this.isSelected,
    required this.onToggle,
    required this.controller,
    required this.darkAccent,
    required this.darkPrimary,
  });

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: [
            Text(
              title,
              style: TextStyle(fontSize: 20, color: darkAccent),
            ),
            Switch(
              value: isSelected,
              onChanged: onToggle,
              activeColor: darkAccent,
              activeTrackColor: darkAccent.withOpacity(0.5),
              inactiveThumbColor: darkAccent,
              inactiveTrackColor: darkPrimary.withOpacity(0.5),
            ),
          ],
        ),
        if (isSelected)
          Padding(
            padding: const EdgeInsets.only(top: 10.0),
            child: TextField(
              controller: controller,
              keyboardType: TextInputType.number,
              decoration: InputDecoration(
                labelText: 'Баллы',
                border: OutlineInputBorder(),
                // Optional: Add error text or validation
              ),
              onChanged: (value) {
                // Optional: Add any additional logic or validation here
              },
            ),
          ),
      ],
    );
  }
}

class DevelopmentPage extends StatelessWidget {
  final Map<String, double> selectedSubjects;
  final Color customTextColor =
      Color.fromARGB(255, 255, 253, 253); // Fully white color

  DevelopmentPage({required this.selectedSubjects});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Color.fromARGB(255, 255, 255, 240),
      appBar: AppBar(
        title: Text(
          'Ваши результаты',
          style: TextStyle(color: Color.fromARGB(255, 0, 0, 0)),
        ),
        backgroundColor:
            Color.fromARGB(255, 255, 255, 240), // Fully opaque white background
        elevation: 0, // Remove shadow
        leading: IconButton(
          icon: Icon(Icons.arrow_back, color: Color.fromARGB(255, 0, 0, 0)),
          onPressed: () {
            Navigator.pop(context);
          },
        ),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: selectedSubjects.isNotEmpty
            ? AnimationLimiter(
                child: ListView.builder(
                  itemCount: selectedSubjects.length,
                  itemBuilder: (context, index) {
                    String subject = selectedSubjects.keys.elementAt(index);
                    double score = selectedSubjects[subject]!;
                    return AnimationConfiguration.staggeredList(
                      position: index,
                      duration: const Duration(milliseconds: 375),
                      child: SlideAnimation(
                        verticalOffset: 50.0,
                        child: FadeInAnimation(
                          child: Card(
                            color: Color.fromARGB(255, 31, 31, 31),
                            margin: EdgeInsets.symmetric(vertical: 8.0),
                            child: ListTile(
                              title: Text(
                                subject,
                                style: TextStyle(
                                  fontSize: 20,
                                  color: customTextColor,
                                  fontWeight: FontWeight.bold,
                                ),
                              ),
                              subtitle: Text(
                                'Баллы: ${score.toInt()}',
                                style: TextStyle(
                                  fontSize: 16,
                                  color: customTextColor,
                                ),
                              ),
                            ),
                          ),
                        ),
                      ),
                    );
                  },
                ),
              )
            : Center(
                child: Text(
                  'Нет выбранных предметов.',
                  style: TextStyle(
                    fontSize: 20,
                    color: customTextColor,
                  ),
                ),
              ),
      ),
    );
  }
}


add bottomsheet class at the top of the selection page with city's in russia, each city need's to have unique id