package com.skripko;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.SelenideElement;
import com.skripko.common.SelenideUtils;
import static com.codeborne.selenide.Condition.*;
public class Post {
public final int SNIPPET_SIZE = 50;
private String id;
private String link;
private String snippet;
private VkDate date;
private User user;
public Post(SelenideElement postEl) {
if (!postEl.has(Condition.hasClass("post"))) {
throw new RuntimeException("Wrong post constructor");
}
id = postEl.getAttribute("id");
snippet = postEl.$(".wall_post_text").getText().substring(0, SNIPPET_SIZE);
SelenideElement footer = postEl.$(".replies").$("small");
link = footer.$("a").getAttribute("href"); //link = publicUrl + id.replace("post", "?w=wall"); //"?w=wall-50702969_2768" id="post-50702969_2748"
date = new VkDate(footer.$(".rel_date").getText());
user = getUserFromPostFooter(footer);
}
private User getUserFromPostFooter(SelenideElement footer) { //todo gap debug
if (footer.$(".wall_signed_by").exists()) { //if user element is shown
return new User(footer.$(".wall_signed_by"));
} else if (footer.$(".post_edit_button").exists()) { //try to click an edit pencil
SelenideElement pencil = footer.$(".post_edit_button");
pencil.hover().waitUntil(present, SelenideUtils.AJAX_WAIT).click();
/*SelenideElement userShowCheckbox = footer.$("#wpe_signed").waitUntil(appear, AJAX_WAIT);
if (footer.has(Condition.hasClass("postponed"))) { //postponed hasn't grayUser. Posted posts must have
checkbox.shouldBe(disabled).click();
SelenideElement saveButton = footer.$(".button_blue");
saveButton.click();
saveButton.waitUntil(disappear, AJAX_WAIT);
pencil.hover();
User user = new User(footer.$(".wall_signed_by"));
pencil.waitUntil(appear, AJAX_WAIT).click();
checkbox.waitUntil(appear, AJAX_WAIT).click();
saveButton.click();
saveButton.waitUntil(disappear, AJAX_WAIT);
return user;
} else {*/
SelenideElement grayUserEl = pencil.$(".wpe_auth_lnk").shouldBe(visible);
User user = new User(grayUserEl);
SelenideElement cancelButton = footer.$(".button_cancel").$(".button");
cancelButton.click();
cancelButton.waitUntil(disappear, SelenideUtils.AJAX_WAIT);
return user;
//}
} else {
return User.getAnon();
}
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getSnippet() {
return snippet;
}
public void setSnippet(String snippet) {
this.snippet = snippet;
}
public VkDate getDate() {
return date;
}
public void setDate(VkDate date) {
this.date = date;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Post post = (Post) o;
if (id != null ? !id.equals(post.id) : post.id != null) return false;
return true;
}
@Override
public int hashCode() {
return id != null ? id.hashCode() : 0;
}
}