@using BackOffice.Services.PublicMessage
@using MudBlazor

<MudDialog>
    <TitleContent>
        <MudText Typo="Typo.h6">
            <MudIcon Icon="@Icons.Material.Filled.Campaign" Class="ml-2" />
            @(IsEditMode ? "ویرایش پیام" : "ایجاد پیام جدید")
        </MudText>
    </TitleContent>
    <DialogContent>
        <MudForm @ref="_form" @bind-IsValid="@_isValid">
            <MudGrid>
                <MudItem xs="12">
                    <MudTextField @bind-Value="Model.Title" 
                                  Label="عنوان پیام *" 
                                  Required="true"
                                  RequiredError="عنوان الزامی است"
                                  Variant="Variant.Outlined" />
                </MudItem>

                <MudItem xs="12" sm="6">
                    <MudSelect @bind-Value="Model.Type" 
                               Label="نوع پیام *" 
                               Required="true"
                               Variant="Variant.Outlined">
                        <MudSelectItem T="MessageType" Value="@MessageType.Announcement">اطلاعیه</MudSelectItem>
                        <MudSelectItem T="MessageType" Value="@MessageType.News">خبر</MudSelectItem>
                        <MudSelectItem T="MessageType" Value="@MessageType.Alert">هشدار</MudSelectItem>
                        <MudSelectItem T="MessageType" Value="@MessageType.Promotion">تبلیغات</MudSelectItem>
                    </MudSelect>
                </MudItem>

                <MudItem xs="12" sm="6">
                    <MudNumericField @bind-Value="Model.Priority" 
                                     Label="اولویت" 
                                     Min="1"
                                     Max="5"
                                     Variant="Variant.Outlined"
                                     HelperText="1 = کم، 5 = زیاد" />
                </MudItem>

                <MudItem xs="12">
                    <MudTextField @bind-Value="Model.Content" 
                                  Label="متن پیام *" 
                                  Required="true"
                                  Lines="6"
                                  Variant="Variant.Outlined" />
                </MudItem>

                <MudItem xs="12" sm="6">
                    <MudDatePicker @bind-Date="Model.StartsAt" 
                                   Label="تاریخ شروع نمایش (اختیاری)" 
                                   Variant="Variant.Outlined"
                                   Clearable="true"
                                   DateFormat="yyyy/MM/dd" />
                </MudItem>

                <MudItem xs="12" sm="6">
                    <MudDatePicker @bind-Date="Model.ExpiresAt" 
                                   Label="تاریخ انقضا (اختیاری)" 
                                   Variant="Variant.Outlined"
                                   Clearable="true"
                                   DateFormat="yyyy/MM/dd" />
                </MudItem>

                <MudItem xs="12" sm="6">
                    <MudTextField @bind-Value="Model.TargetAudience" 
                                  Label="مخاطب هدف (اختیاری)" 
                                  Variant="Variant.Outlined"
                                  HelperText="مثال: همه، نمایندگان، کاربران جدید" />
                </MudItem>

                <MudItem xs="12" sm="6">
                    <MudSwitch T="bool" @bind-Value="Model.IsDismissible" 
                               Label="قابل رد کردن توسط کاربر" 
                               Color="Color.Primary" />
                </MudItem>

                <MudItem xs="12">
                    <MudTextField @bind-Value="_tagsInput" 
                                  Label="تگ‌ها (با کاما جدا کنید)" 
                                  Variant="Variant.Outlined"
                                  HelperText="مثال: مهم, فوری, اطلاعیه" />
                </MudItem>

                @if (!IsEditMode)
                {
                    <MudItem xs="12">
                        <MudSwitch T="bool" @bind-Value="Model.PublishImmediately" 
                                   Label="انتشار فوری پس از ایجاد" 
                                   Color="Color.Success" />
                        @if (!Model.PublishImmediately)
                        {
                            <MudText Typo="Typo.caption" Color="Color.Secondary">
                                پیام به صورت پیش‌نویس ذخیره می‌شود
                            </MudText>
                        }
                    </MudItem>
                }
            </MudGrid>
        </MudForm>
    </DialogContent>
    <DialogActions>
        <MudButton OnClick="Cancel" Variant="Variant.Text">انصراف</MudButton>
        <MudButton OnClick="Submit" 
                   Variant="Variant.Filled" 
                   Color="Color.Primary" 
                   Disabled="@(!_isValid || _loading)">
            @if (_loading)
            {
                <MudProgressCircular Size="Size.Small" Indeterminate="true" />
            }
            else
            {
                <text>@(IsEditMode ? "ذخیره تغییرات" : Model.PublishImmediately ? "ایجاد و انتشار" : "ذخیره پیش‌نویس")</text>
            }
        </MudButton>
    </DialogActions>
</MudDialog>

@code {
    [CascadingParameter] IMudDialogInstance MudDialog { get; set; } = null!;
    [Parameter] public MessageFormModel Model { get; set; } = new();
    [Parameter] public bool IsEditMode { get; set; }

    private MudForm? _form;
    private bool _isValid;
    private bool _loading;
    private string _tagsInput = string.Empty;

    protected override void OnInitialized()
    {
        if (Model.Tags?.Any() == true)
        {
            _tagsInput = string.Join(", ", Model.Tags);
        }
    }

    private async Task Submit()
    {
        if (_form != null)
        {
            await _form.Validate();
            if (!_isValid) return;
        }

        _loading = true;

        // Parse tags
        if (!string.IsNullOrWhiteSpace(_tagsInput))
        {
            Model.Tags = _tagsInput.Split(',', StringSplitOptions.RemoveEmptyEntries)
                .Select(t => t.Trim())
                .Where(t => !string.IsNullOrEmpty(t))
                .ToList();
        }

        MudDialog.Close(DialogResult.Ok(Model));
        _loading = false;
    }

    private void Cancel()
    {
        MudDialog.Cancel();
    }

    public class MessageFormModel
    {
        public string Title { get; set; } = string.Empty;
        public string Content { get; set; } = string.Empty;
        public MessageType Type { get; set; } = MessageType.Announcement;
        public int Priority { get; set; } = 1;
        public DateTime? StartsAt { get; set; }
        public DateTime? ExpiresAt { get; set; }
        public bool IsDismissible { get; set; } = true;
        public string? TargetAudience { get; set; }
        public List<string>? Tags { get; set; }
        public bool PublishImmediately { get; set; } = false;
    }
}
