/*
 * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "ui_test_render.h"

#include "common/screen.h"

namespace OHOS {
void UITestRender::SetUp()
{
    if (container_ == nullptr) {
        container_ = new UIScrollView();
        container_->Resize(Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight() - BACK_BUTTON_HEIGHT);
    }
}

void UITestRender::TearDown()
{
    DeleteChildren(container_);
    container_ = nullptr;
}

const UIView* UITestRender::GetTestView()
{
    UIKitRenderTestRender001();
    UIKitRenderTestRenderMeasure001();
    return container_;
}

class TestRenderClickListener : public UIView::OnClickListener {
public:
    bool OnClick(UIView& view, const ClickEvent& event) override
    {
        static uint8_t r = 20;
        static uint8_t g = 120;
        static uint8_t b = 50;
        view.SetStyle(STYLE_BACKGROUND_COLOR, Color::GetColorFromRGB(r, g, b).full);
        view.Invalidate();

        r = r + 30; // 30: red add
        g = g + 30; // 30: green add
        b = b + 30; // 30: blue add
        return true;
    }
};

UIViewGroup* UITestRender::CreateTestCaseGroup() const
{
    UIViewGroup* group = new UIViewGroup();
    group->Resize(Screen::GetInstance().GetWidth(), 200); // 200: height
    return group;
}

UILabel* UITestRender::CreateTitleLabel() const
{
    UILabel* label = new UILabel();
    // 216: label width
    label->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, TEXT_DISTANCE_TO_TOP_SIDE, 216, TITLE_LABEL_DEFAULT_HEIGHT);
    label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
    return label;
}

void UITestRender::UIKitRenderTestRender001()
{
    if (container_ == nullptr) {
        return;
    }

    UIViewGroup* group = CreateTestCaseGroup();
    group->SetViewId("UIKit_Render_Test_Render_001");
    group->SetPosition(0, 0);

    UILabel* label = CreateTitleLabel();
    group->Add(label);
    label->SetText("UIKit绘制效果:");

    UIView* view = new UIView();
    view->Resize(200, 50);     // 200: width 50: height
    view->SetPosition(50, 50); // 50: position x 50: position y
    view->SetStyle(STYLE_BACKGROUND_COLOR, Color::Yellow().full);
    group->Add(view);
    view->SetTouchable(true);
    view->SetOnClickListener(new TestRenderClickListener());

    UIView* view1 = new UIView();
    view1->Resize(100, 50);      // 100: width 50: height
    view1->SetPosition(50, 120); // 50: position x 120: position y
    view1->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full);
    view1->SetTouchable(true);
    view1->SetOnClickListener(new TestRenderClickListener());
    group->Add(view1);
    container_->Add(group);
}

void UITestRender::UIKitRenderTestRenderMeasure001()
{
    if (container_ == nullptr) {
        return;
    }

    UIViewGroup* group = CreateTestCaseGroup();
    group->SetViewId("UIKit_Render_Test_RenderMeasure_001");
    container_->Add(group);

    UILabel* label = CreateTitleLabel();
    group->Add(label);
    // 2: half of screen width
    label->Resize(Screen::GetInstance().GetWidth() / 2, TITLE_LABEL_DEFAULT_HEIGHT);
    label->SetText("UIKit绘制Measure效果:");

    testLabel_ = new UILabel();
    group->Add(testLabel_);
    testLabel_->SetPosition(VIEW_DISTANCE_TO_LEFT_SIDE, VIEW_DISTANCE_TO_TOP_SIDE);
    testLabel_->Resize(150, 80); // 150: width 80: height
    testLabel_->SetViewId("label_text");
    testLabel_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
    testLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
    testLabel_->SetText("示例文字,示例文字");

    labelButton_ = new UILabelButton();
    group->Add(labelButton_);
    labelButton_->Resize(BUTTON_WIDHT3, BUTTON_HEIGHT3);
    labelButton_->SetText("更新label");
    labelButton_->SetViewId(UI_TEST_RENDER_UPDATA_BUTTON_ID_01);
    labelButton_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
    labelButton_->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::RELEASED);
    labelButton_->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::PRESSED);
    labelButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::RELEASED);
    labelButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_PRESS, UIButton::PRESSED);
    labelButton_->SetPosition(VIEW_DISTANCE_TO_LEFT_SIDE, VIEW_DISTANCE_TO_TOP_SIDE);
    labelButton_->SetOnClickListener(this);
    labelButton_->LayoutBottomToSibling("label_text"); // 10: offset

    group->LayoutBottomToSibling("UIKit_Render_Test_Render_001", 10); // 10: offset
}

bool UITestRender::OnClick(UIView& view, const ClickEvent& event)
{
    if (&view == labelButton_) {
        testLabel_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 15); // 18: font size
    }
    return true;
}
} // namespace OHOS