import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../../services/auth_service.dart'; import '../../models/user_model.dart'; class ProfileScreen extends StatefulWidget { const ProfileScreen({super.key}); @override State createState() => _ProfileScreenState(); } class _ProfileScreenState extends State { final _formKey = GlobalKey(); final _nameController = TextEditingController(); bool _isEditing = false; @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { final user = Provider.of(context, listen: false).currentUser; if (user != null) { _nameController.text = user.name; } }); } @override void dispose() { _nameController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('내 프로필'), actions: [ IconButton( icon: Icon(_isEditing ? Icons.save : Icons.edit), onPressed: () { setState(() { _isEditing = !_isEditing; }); if (!_isEditing) { // 저장 로직 구현 (추후 개발) if (_formKey.currentState!.validate()) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('프로필이 업데이트되었습니다')), ); } } }, ), ], ), body: Consumer( builder: (context, authService, child) { final User? user = authService.currentUser; if (user == null) { return const Center(child: Text('사용자 정보를 불러올 수 없습니다')); } return SingleChildScrollView( padding: const EdgeInsets.all(16.0), child: Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ // 프로필 이미지 CircleAvatar( radius: 50, backgroundImage: user.profileImage != null ? NetworkImage(user.profileImage!) : null, child: user.profileImage == null ? Text( user.name.isNotEmpty ? user.name[0].toUpperCase() : '?', style: const TextStyle(fontSize: 40), ) : null, ), const SizedBox(height: 16), // 이름 필드 TextFormField( controller: _nameController, enabled: _isEditing, decoration: const InputDecoration( labelText: '이름', border: OutlineInputBorder(), ), validator: (value) { if (value == null || value.isEmpty) { return '이름을 입력해주세요'; } return null; }, ), const SizedBox(height: 16), // 이메일 (수정 불가) TextFormField( initialValue: user.email, enabled: false, decoration: const InputDecoration( labelText: '이메일', border: OutlineInputBorder(), ), ), const SizedBox(height: 16), // 역할 표시 TextFormField( initialValue: _getRoleDisplayName(user.role), enabled: false, decoration: const InputDecoration( labelText: '역할', border: OutlineInputBorder(), ), ), const SizedBox(height: 16), // 클럽 역할 표시 (클럽이 있는 경우) if (user.clubRole != null) TextFormField( initialValue: _getRoleDisplayName(user.clubRole!), enabled: false, decoration: const InputDecoration( labelText: '클럽 내 역할', border: OutlineInputBorder(), ), ), const SizedBox(height: 32), // 로그아웃 버튼 ElevatedButton( onPressed: () async { await authService.logout(); if (context.mounted) { Navigator.of(context).pushReplacementNamed('/login'); } }, style: ElevatedButton.styleFrom( backgroundColor: Colors.red, foregroundColor: Colors.white, padding: const EdgeInsets.symmetric( horizontal: 32, vertical: 12, ), ), child: const Text('로그아웃'), ), ], ), ), ); }, ), ); } // 역할 표시 이름 변환 String _getRoleDisplayName(String role) { switch (role) { case 'admin': return '관리자'; case 'superadmin': return '최고 관리자'; case 'user': return '일반 사용자'; case 'owner': return '클럽 소유자'; case 'manager': return '클럽 매니저'; case 'member': return '클럽 회원'; default: return role; } } }