import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:superport/screens/common/widgets/remark_input.dart';
import 'package:superport/screens/common/theme_shadcn.dart';
import 'package:superport/screens/common/templates/form_layout_template.dart';
import 'controllers/warehouse_location_form_controller.dart';

/// 입고지 추가/수정 폼 화면 (SRP 적용, 상태/로직 분리)
class WarehouseLocationFormScreen extends StatefulWidget {
  final int? id; // 수정 모드 지원을 위한 id 파라미터
  const WarehouseLocationFormScreen({Key? key, this.id}) : super(key: key);

  @override
  State<WarehouseLocationFormScreen> createState() =>
      _WarehouseLocationFormScreenState();
}

class _WarehouseLocationFormScreenState
    extends State<WarehouseLocationFormScreen> {
  /// 폼 컨트롤러 (상태 및 저장/수정 로직 위임)
  late final WarehouseLocationFormController _controller;

  @override
  void initState() {
    super.initState();
    // 컨트롤러 생성 및 초기화
    _controller = WarehouseLocationFormController();
    if (widget.id != null) {
      _controller.initialize(widget.id!);
    }
  }

  @override
  void dispose() {
    // 컨트롤러 해제
    _controller.dispose();
    super.dispose();
  }

  // 저장 메소드
  Future<void> _onSave() async {
    setState(() {}); // 저장 중 상태 갱신
    final success = await _controller.save();
    setState(() {}); // 저장 완료 후 상태 갱신
    
    if (success) {
      // 성공 메시지 표시
      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text(_controller.isEditMode ? '입고지가 수정되었습니다' : '입고지가 추가되었습니다'),
            backgroundColor: ShadcnTheme.success,
          ),
        );
        // 리스트 화면으로 돌아가기
        Navigator.of(context).pop(true);
      }
    } else {
      // 실패 메시지 표시
      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text(_controller.error ?? '저장에 실패했습니다'),
            backgroundColor: ShadcnTheme.error,
          ),
        );
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return FormLayoutTemplate(
      title: _controller.isEditMode ? '입고지 수정' : '입고지 추가',
      onSave: _controller.isSaving ? null : _onSave,
      saveButtonText: '저장',
      isLoading: _controller.isSaving,
      child: Form(
        key: _controller.formKey,
        child: SingleChildScrollView(
          padding: const EdgeInsets.all(UIConstants.formPadding),
          child: FormSection(
            title: '창고 정보',
            subtitle: '창고의 기본 정보를 입력하세요',
            children: [
              // 입고지명 입력
              FormFieldWrapper(
                label: '창고명',
                required: true,
                child: TextFormField(
                  controller: _controller.nameController,
                  decoration: const InputDecoration(
                    hintText: '창고명을 입력하세요',
                    border: OutlineInputBorder(),
                  ),
                  validator: (value) {
                    if (value == null || value.trim().isEmpty) {
                      return '창고명을 입력하세요';
                    }
                    return null;
                  },
                ),
              ),
              // 주소 입력 (단일 필드)
              FormFieldWrapper(
                label: '주소',
                child: TextFormField(
                  controller: _controller.addressController,
                  decoration: const InputDecoration(
                    hintText: '주소를 입력하세요 (예: 경기도 용인시 기흥구 동백로 123)',
                    border: OutlineInputBorder(),
                  ),
                  maxLines: 3,
                ),
              ),
              // 담당자명 입력
              FormFieldWrapper(
                label: '담당자명',
                child: TextFormField(
                  controller: _controller.managerNameController,
                  decoration: const InputDecoration(
                    hintText: '담당자명을 입력하세요',
                    border: OutlineInputBorder(),
                  ),
                ),
              ),
              // 담당자 연락처 입력
              FormFieldWrapper(
                label: '담당자 연락처',
                child: TextFormField(
                  controller: _controller.managerPhoneController,
                  decoration: const InputDecoration(
                    hintText: '연락처를 입력하세요 (예: 02-1234-5678)',
                    border: OutlineInputBorder(),
                  ),
                  keyboardType: TextInputType.phone,
                  validator: _controller.validatePhoneNumber,
                ),
              ),
              // 수용량 입력
              FormFieldWrapper(
                label: '수용량',
                child: TextFormField(
                  controller: _controller.capacityController,
                  decoration: const InputDecoration(
                    hintText: '수용량을 입력하세요 (개)',
                    border: OutlineInputBorder(),
                    suffixText: '개',
                  ),
                  keyboardType: TextInputType.number,
                  inputFormatters: [
                    FilteringTextInputFormatter.digitsOnly,
                  ],
                  validator: _controller.validateCapacity,
                ),
              ),
              // 비고 입력
              FormFieldWrapper(
                label: '비고',
                child: RemarkInput(controller: _controller.remarkController),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
