@using boilerplate.Models
@model User
@{
    var User = Session["User"] as User;
    if (Model == null || User == null) { return; }
    ViewBag.Title = Model.User_Id == 0 ? "کاربر جدید" : Model.User_Name + " " + Model.User_Family;
    Layout = "~/Views/_PanelSideBar.cshtml";
    Functions functions = new Functions();
}
<form autocomplete="off">
    <div class="row">
        <div class="col-md-8 form-group">
            <div class="row">
                <div class="col-12 form-group">
                    <div class="card card-custom">
                        <div class="card-body">
                            <div class="form-group row align-items-center">
                                <div class="col-md-2">
                                    <label for="txtName">نام:</label>
                                </div>
                                <div class="col-md-10">
                                    <input class="form-control" id="txtName" placeholder="نام ..." value="@Model.User_Name" />
                                </div>
                            </div>
                            <div class="form-group row align-items-center">
                                <div class="col-md-2">
                                    <label for="txtFamily">نام خانوادگی:</label>
                                </div>
                                <div class="col-md-10">
                                    <input class="form-control" id="txtFamily" placeholder="نام خانوادگی ..." value="@Model.User_Family" />
                                </div>
                            </div>
                            <div class="form-group row align-items-center">
                                <div class="col-md-2">
                                    <label for="txtPhone">شماره موبایل:</label>
                                </div>
                                <div class="col-md-10">
                                    <input class="form-control" id="txtPhone" placeholder="شماره موبایل ..." value="@Model.User_Phone" />
                                </div>
                            </div>
                            <div class="form-group row align-items-center">
                                <div class="col-md-2">
                                    <label for="txtPassword">رمز عبور:</label>
                                </div>
                                <div class="col-md-10">
                                    <input class="form-control" id="txtPassword" placeholder="رمز عبور ..." />
                                </div>
                            </div>
                            <div class="form-group row align-items-center">
                                <div class="col-md-2">
                                    <label for="ddlRole">نوع کاربر:</label>
                                </div>
                                <div class="col-md-10">
                                    <select class="form-control" id="ddlRole">
                                        <option value="Admin" @(Model.User_Role == "Admin" ? "selected" : "")>مدیر</option>
                                        <option value="User" @(Model.User_Role == "User" ? "selected" : "")>کاربر</option>
                                    </select>
                                </div>
                            </div>
                            <div class="form-group row align-items-center">
                                <div class="col-md-2">
                                    <label for="fuImage">تصویر:</label>
                                </div>
                                <div class="col-md-8">
                                    <input class="form-control" id="fuImage" type="file" accept="image/*" />
                                </div>
                                <div class="col-md-2">
                                    <a href="~/Media/User/@Model.User_Image" target="_blank">
                                        <div class="symbol symbol-100 border">
                                            <img src="~/Media/User/@Model.User_Image" id="fuPreview" style="object-fit: cover;">
                                        </div>
                                    </a>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="col-md-4 form-group">
            <div class="row">
                <div class="col-12 form-group">
                    <div class="card card-custom">
                        <div class="card-header bg-secondary-o-100">
                            <div class="card-title">
                                <label>انتشار</label>
                            </div>
                        </div>
                        <div class="card-body align-items-center">
                            <div class="row align-items-center">
                                <div class="col">
                                    <label for="chkStatus">فعال:</label>
                                </div>
                                <div class="col">
                                    <span class="switch switch-outline switch-icon switch-sm switch-success">
                                        <label>
                                            <input type="checkbox" id="chkActive" @(Model.User_Status == 1 ? "checked" : "")>
                                            <span></span>
                                        </label>
                                    </span>
                                </div>
                            </div>
                        </div>
                        <div class="card-footer">
                            <div class="row">
                                @if (Model.User_Id != 0)
                                {
                                    if (User.User_Id != Model.User_Id && functions.HasAccess(User.User_Access, "ManageDeleteUser"))
                                    {
                                        <div class="col text-center">
                                            <a class="btn btn-danger btn-shadow btn-sm w-100 btns" onclick="Delete()">حذف</a>
                                        </div>
                                    }
                                }
                                <div class="col text-center">
                                    <a class="btn btn-success btn-shadow btns @(Model.User_Id != 0 ? $"btn-sm {(User.User_Id == Model.User_Id ? "" : "w-100")}" : "")" onclick="Save()" id="btnSave">@(Model.User_Id == 0 ? "انتشار" : "ذخیره")</a>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="col-12 form-group" id="CategoryBlock">
                    <div class="card card-custom">
                        <div class="card-header bg-secondary-o-100">
                            <div class="card-title">
                                <label>دسترسی ها</label>
                            </div>
                            <div class="card-toolbar">
                                <a class="btn btn-sm btn-icon btn-primary mx-1" onclick="$(`input[name='chkAccess']`).prop('checked', false)" data-toggle="tooltip" title="عدم علامت همه">
                                    <i class="fa fa-minus"></i>
                                </a>
                                <a class="btn btn-sm btn-icon btn-primary mx-1" onclick="$(`input[name='chkAccess']`).prop('checked', true)" data-toggle="tooltip" title="علامت زدن همه">
                                    <i class="fa fa-check"></i>
                                </a>
                            </div>
                        </div>
                        <div class="card-body align-items-center">
                            <div class="max-h-250px overflow-auto">
                                <div class="checkbox-list mb-3">
                                    <label class="checkbox">
                                        <input type="checkbox" value="ManageDashboard" name="chkAccess">
                                        <span></span>
                                        آمار داشبورد
                                    </label>
                                </div>
                                <div class="checkbox-list mb-3">
                                    <label class="checkbox">
                                        <input type="checkbox" value="ManageUser" name="chkAccess">
                                        <span></span>
                                        مدیریت کاربران
                                    </label>
                                </div>
                                <div class="checkbox-list mb-3">
                                    <label class="checkbox">
                                        <input type="checkbox" value="ManageDeleteUser" name="chkAccess">
                                        <span></span>
                                        مدیریت حذف کاربران
                                    </label>
                                </div>
                                <div class="checkbox-list mb-3">
                                    <label class="checkbox">
                                        <input type="checkbox" value="ManageSetting" name="chkAccess">
                                        <span></span>
                                        تنظیمات
                                    </label>
                                </div>
                                <div class="checkbox-list mb-3">
                                    <label class="checkbox">
                                        <input type="checkbox" name="chkAccess" value="ManageItems" @(Model.User_Access != null && Model.User_Access.Contains("ManageItems") ? "checked" : "") />
                                        <span></span>
                                        مدیریت دسته‌بندی و تگ
                                    </label>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</form>
@section Script {
    <script>
        const Id = @Model.User_Id;

        $("#UserList").addClass("menu-item-open");
        if (Id == 0) { $("#UserMenu").addClass("menu-item-active"); }

        const UserAccess = "@Model.User_Access";
        if (UserAccess == "All") {
            $(`input[name="chkAccess"]`).prop("checked", true);
        }
        else {
            UserAccess.split(',').forEach(item => { $(`input[name="chkAccess"][value="${item}"]`).prop("checked", true); });
        }

        $(window).bind('keydown', function (event) {
            if (event.ctrlKey || event.metaKey) {
                switch (String.fromCharCode(event.which).toLowerCase()) {
                    case 's':
                        event.preventDefault();
                        $("#btnSave").click();
                        break;
                }
            }
        });

        $("#fuImage").on("change", function () {
            if (this.files.length) {
                try {
                    let Image = this.files[0];
                    if (Image.type.includes("image/")) {
                        var reader = new FileReader();
                        reader.onload = function () {
                            $("#fuPreview").attr("src", reader.result);
                        };
                        reader.readAsDataURL(Image);
                    }
                    else {
                        $(this).val(null);
                        toastr.error('فایل انتخاب شده پشتیبانی نمی شود !');
                    }
                } catch (e) { }
            }
        });

        function Save() {
            // --- ADDED: Client-side validation for image on new users ---
            var isNew = (Id === 0);
            var fileInput = $("#fuImage")[0];
            if (isNew && fileInput.files.length === 0) {
                toastr.error("لطفاً یک تصویر برای کاربر انتخاب کنید.");
                return; // Stop the function if image is missing
            }

            let Phone = $("#txtPhone").val().trim();
            if (Phone.length) {
                let Access = "";
                if ($('input[name="chkAccess"]').length == $('input[name="chkAccess"]:checked').length) {
                    Access = "All";
                }
                else if ($('input[name="chkAccess"]:checked').length) {
                    $('input[name="chkAccess"]:checked').each(function () {
                        if (Access) {
                            Access += `,${this.value}`;
                        }
                        else {
                            Access = this.value;
                        }
                    });
                }
                $("#btnSave").css("opacity", 0.5);
                $("#btnSave").attr("onclick", "");
                let model = {
                    Auth: { UserId: @User.User_Id, Token: "@User.User_Token" },
                    Id: Id,
                    Name: $("#txtName").val().trim(),
                    Family: $("#txtFamily").val().trim(),
                    Phone: Phone,
                    Password: $("#txtPassword").val().trim(),
                    Role: $("#ddlRole").val(),
                    Status: $("#chkActive").prop("checked") ? 1 : 2,
                    Access: Access
                };
                let formData = new FormData();
                formData.append("Model", JSON.stringify(model));
                formData.append("Image", $("#fuImage")[0].files[0]);
                let ajax = new XMLHttpRequest();
                ajax.addEventListener("load", function (event) {
                    $("#btnSave").css("opacity", 1);
                    let data = JSON.parse(event.target.responseText);

                    if (data.Status == "Success") {
                        toastr.success("ذخیره سازی با موفقیت انجام شد");
                        setTimeout(function () {
                            location.href = `../Panel/User/${data.Result}`;
                        }, 1500);
                    }
                    else if (data.Status == "DuplicatePhone") {
                        $("#btnSave").attr("onclick", "Save()"); // Re-enable button
                        toastr.error("این شماره تلفن قبلاً در سیستم ثبت شده است!");
                    }
                    else {
                        $("#btnSave").attr("onclick", "Save()");
                        console.log(data);
                        toastr.warning("خطا هنگام ذخیره سازی اطلاعات");
                    }
                }, false);
                ajax.addEventListener("error", function () {
                    $("#btnSave").css("opacity", 1);
                    $("#btnSave").attr("onclick", "Save()");
                    toastr.error("خطا هنگام برقراری ارتباط با سرور");
                }, false);
                ajax.open("POST", "../api/User/Manage");
                ajax.send(formData);
            }
            else {
                toastr.warning("شماره موبایل را وارد کنید");
            }
        }

        function Delete() {
            Swal.fire({
                title: "آیا از انجام این عملیات مطمئن هستید ؟",
                text: "این عملیات قابل برگشت نمی باشد !!!",
                icon: 'warning',
                showCancelButton: true,
                confirmButtonColor: '#3085d6',
                cancelButtonColor: '#d33',
                cancelButtonText: 'خیر',
                confirmButtonText: 'بله'
            }).then((result) => {
                if (result.value) {
                    $.post("../api/User/Delete", { Id: Id, UserId: @User.User_Id, Token: "@User.User_Token" }).done(function (data) {
                        if (data.Status == "Success") {
                            $(".btns").remove();
                            toastr.success("حذف با موفقیت انجام شد");
                            setTimeout(function () {
                                location.href = "../Panel/Users";
                            }, 1500);
                        } else {
                            toastr.warning("خطا هنگام برقراری ارتباط با سرور");
                        }
                    }).fail(function () {
                        toastr.error("خطا هنگام برقراری ارتباط با سرور");
                    });
                }
            });
        }
    </script>
}
