describe("User Management", () => {
  beforeEach(() => {
    cy.login();
    cy.visit("/admin-users");
    cy.waitForLoading();
  });

  it("should display admin users list page", () => {
    cy.contains("مدیریت کاربران ادمین").should("be.visible");
    cy.contains("مدیریت کاربران دسترسی به پنل ادمین").should("be.visible");
    cy.get('[title="کاربر ادمین جدید"]').should("be.visible");
  });

  it("should create a new admin user", () => {
    cy.get('[title="کاربر ادمین جدید"]').click();

    cy.url().should("include", "/admin-users/create");
    cy.contains("کاربر ادمین جدید").should("be.visible");

    // Fill user form
    cy.get('input[name="first_name"]').type("احمد");
    cy.get('input[name="last_name"]').type("محمدی");
    cy.get('input[name="username"]').type("ahmad.mohammadi");
    // Email field removed as admin users only need username
    cy.get('input[name="password"]').type("password123");
    // Phone field not available in admin user form

    // Set status
    cy.get('select[name="status"]').select("active");

    cy.get('button[type="submit"]').click();

    cy.url().should("include", "/admin-users");
    cy.contains("کاربر با موفقیت ایجاد شد").should("be.visible");
    cy.contains("احمد محمدی").should("be.visible");
  });

  it("should search admin users", () => {
    cy.get('input[placeholder*="جستجو"]').type("احمد");
    cy.get("button").contains("جستجو").click();

    cy.waitForLoading();
    cy.get("table tbody tr").should("contain", "احمد");
  });

  it("should filter users by role", () => {
    cy.get("select").contains("نقش").select("مدیر");
    cy.get("button").contains("اعمال فیلتر").click();

    cy.waitForLoading();
    // Results should be filtered by role
  });

  it("should edit an admin user", () => {
    cy.get('[title="ویرایش"]').first().click();

    cy.url().should("include", "/admin-users/");
    cy.url().should("include", "/edit");

    // Update user info
    cy.get('input[name="first_name"]').clear().type("علی");
    cy.get('input[name="last_name"]').clear().type("احمدی");

    cy.get('button[type="submit"]').click();

    cy.url().should("include", "/admin-users");
    cy.contains("کاربر با موفقیت ویرایش شد").should("be.visible");
    cy.contains("علی احمدی").should("be.visible");
  });

  it("should delete an admin user", () => {
    cy.get('[title="حذف"]').first().click();

    // Confirm deletion in modal
    cy.get(".modal").should("be.visible");
    cy.get("button").contains("حذف").click();

    cy.contains("کاربر با موفقیت حذف شد").should("be.visible");
  });

  it("should validate admin user form", () => {
    cy.get('[title="کاربر ادمین جدید"]').click();

    // Try to submit empty form
    cy.get('button[type="submit"]').click();

    // Should show validation errors
    cy.contains("نام الزامی است").should("be.visible");
    cy.contains("نام خانوادگی الزامی است").should("be.visible");
    cy.contains("نام کاربری الزامی است").should("be.visible");
    // Email not required for admin users
  });

  it("should validate username format", () => {
    cy.get('[title="کاربر ادمین جدید"]').click();

    cy.get('input[name="username"]').type("ab"); // خیلی کوتاه
    cy.get('button[type="submit"]').click();

    cy.contains("نام کاربری باید حداقل 3 کاراکتر باشد").should("be.visible");
  });

  it("should validate username uniqueness", () => {
    cy.get('[title="کاربر ادمین جدید"]').click();

    // Fill form with existing username
    cy.get('input[name="first_name"]').type("تست");
    cy.get('input[name="last_name"]').type("کاربر");
    cy.get('input[name="username"]').type("admin"); // Assuming 'admin' already exists
    cy.get('input[name="password"]').type("password123");

    cy.get('button[type="submit"]').click();

    cy.contains("نام کاربری قبلاً استفاده شده است").should("be.visible");
  });

  it("should handle user status toggle", () => {
    // Assuming there's a toggle for user status
    cy.get('[data-testid="user-status-toggle"]').first().click();

    cy.contains("وضعیت کاربر با موفقیت تغییر کرد").should("be.visible");
  });

  it("should display user activity logs", () => {
    cy.get('[title="لاگ فعالیت"]').first().click();

    cy.get(".modal").should("be.visible");
    cy.contains("لاگ فعالیت کاربر").should("be.visible");
    cy.get("table").should("be.visible");
  });
});
