<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You 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.
-->

<div class="main-background" style="background-image:url('assets/Background.png');">
  <div style="margin-top:5%; margin-left:25%;">
    <div class="welcome">
      <span class="greetings">Welcome To Apache Fineract CN</span>
    </div>
    <div class="language">
      <span class="change">Change language</span>
      <mat-form-field class="select-input">
        <mat-select [(ngModel)]="currentLanguage" name="language"  matTooltip="Change Language" matTooltipPosition="right" (change)="selectLanguage($event)">
          <mat-option  *ngFor="let option of languageOptions" [value]="option.id"> {{option.label}}</mat-option>
        </mat-select>
      </mat-form-field>
    </div>
  </div>
  <div style="margin-left:20%;">
    <div class="image-div">
      <img src="assets/fineract.png" class="image">
    </div>
    <div class="login-div mat-elevation-z2">
        <form [formGroup]="form" (ngSubmit)="login()">
      <br>
      <div class="form-div">
        <div class="app-input">
          <mat-icon>business</mat-icon>
        </div>
        <div class="app-input1">
          <mat-form-field class="app-input2">
            <input matInput placeholder="Tenant" type="text" formControlName="tenant">
            <mat-error *ngIf="form.get('tenant').hasError('required')">
                Required
              </mat-error>
          
          </mat-form-field>
        </div>

        <br>
        <br>
        <div class="app-input">
          <mat-icon>person</mat-icon>
        </div>
        <div class="app-input1">
          <mat-form-field class="app-input2">
            <input matInput placeholder="Username" type="text" formControlName="username">
            <mat-error *ngIf="form.get('password').hasError('required')">
                Required
              </mat-error>
          </mat-form-field>
        </div>
        <br>
        <br>
        <div class="app-input">
          <mat-icon>https</mat-icon>
          </div>
          <div class="app-input1">
            <mat-form-field class="app-input2">
              <input matInput placeholder="Password" type="password" formControlName="password" autocomplete="new-password" [type]="!hide ? 'password' : 'text'">
              <mat-error *ngIf="form.get('password').hasError('required')">
                  Required
                </mat-error>
              <mat-icon matSuffix (click)="hide = !hide">{{hide ? 'visibility_off' : 'visibility' }}</mat-icon>
            </mat-form-field>
          </div>
          <br>
          <br>
          <p>
            <button mat-raised-button color="primary" type="submit" class="btn" [disabled]="form.invalid">Sign In</button>
          </p>
          <br>
        </div>
        </form>
      </div>
  </div>



    </div>