import { CheckboxControl } from '../models/control-checkbox';
import { DropdownControl } from '../models/control-dropdown';
import { TextboxControl } from '../models/control-textbox';
import { ControlService } from '../models/control.service';
import { Component, OnInit } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
import { CheckboxConfig, CheckboxGroup, CheckboxOption } from '../models/checkbox.model';
import { SingleCheckboxControl } from '../models/singlecheckbox.model';

@Component({
  selector: 'app-model-driven',
  templateUrl: './model-driven.component.html',
  providers: [ControlService]
})
export class ModelDrivenComponent {
  controls: any[];
  checkboxes: any[];

  constructor(service: ControlService) {
    this.controls = [
      new TextboxControl({
        key: 'clientId',
        label: 'Client ID',
        value: '',
      }),
      new TextboxControl({
        key: 'clientName',
        label: 'Client Name',
        value: '',
      }),
      new TextboxControl({
        key: 'clientUri',
        label: 'Client URI',
        value: '',
      }),
      new TextboxControl({
        key: 'logoUri',
        label: 'Logo URI',
        value: '',
      }),
      new SingleCheckboxControl({
        key: 'requireConsent',
        label: 'Require Consent',
        value: false
      }),
      new SingleCheckboxControl({
        key: 'allowRememberConsent',
        label: 'Allow Remember Consent',
        value: false
      }),
      new TextboxControl({
        key: 'redirectUrl',
        label: 'Redirect URL',
        value: 'http://',
      }),
      new TextboxControl({
        key: 'scopes',
        label: 'Scopes',
        value: '',
      }),
      new DropdownControl({
        key: 'grantType',
        label: 'Grant Type',
        options: [
          { key: 'code', value: 'code' },
          { key: 'client_credentials', value: 'client_credentials' },
          { key: 'implicit', value: 'implicit' },
          { key: 'hybrid', value: 'hybrid' }
        ]
      }),
      new TextboxControl({
        key: 'accessTokenLifetime',
        label: 'Access token lifetime',
        value: '600',
        type: 'number'
      }),
      new TextboxControl({
        key: 'identityTokenLifetime',
        label: 'Identity Token Lifetime',
        value: '600',
        type: 'number'
      }),
      new TextboxControl({
        key: 'authorizationCodeLifetime',
        label: 'Authorization Code Lifetime',
        value: '600',
        type: 'number'
      }),
      new TextboxControl({
        key: 'absoluteRefreshTokenLifetime',
        label: 'Absolute Refresh Token Lifetime',
        value: '600',
        type: 'number'
      }),
      new TextboxControl({
        key: 'slidingRefreshTokenLifetime',
        label: 'Sliding Refresh Token Lifetime',
        value: '600',
        type: 'number'
      }),

      // refreshTokenUsage

      new TextboxControl({
        key: 'refreshTokenExpiration',
        label: 'Refresh Token Expiration',
        value: '600',
        type: 'number'
      }),

      // accesstokentype

      new SingleCheckboxControl({
        key: 'enableLocalLogin',
        label: 'Enable Local Login',
        value: true
      }),
      new SingleCheckboxControl({
        key: 'includeJwtId',
        label: 'Include JWT ID',
        value: false
      }),
      new SingleCheckboxControl({
        key: 'alwaysSendClientClaims',
        label: 'Always Send Client Claims',
        value: false
      }),
      new SingleCheckboxControl({
        key: 'prefixClientClaims',
        label: 'Prefix Client Claims',
        value: false
      }),
      new SingleCheckboxControl({
        key: 'allowClientCredentialsOnly',
        label: 'Allow Client Credentials Only',
        value: false
      }),
      new SingleCheckboxControl({
        key: 'updateAccessTokenOnRefresh',
        label: 'Update Access Token On Refresh',
        value: false
      }),
      new SingleCheckboxControl({
        key: 'allowAccessToAllScopes',
        label: 'Allow Access To All Scopes',
        value: false
      }),
      new SingleCheckboxControl({
        key: 'allowAccessToAllGrantTypes',
        label: 'Allow Access To All GrantTypes',
        value: false
      }),
      new SingleCheckboxControl({
        key: 'logoutSessionRequired',
        label: 'Logout Session Required',
        value: false
      }),
      new SingleCheckboxControl({
        key: 'requireSignOutPrompt',
        label: 'Require Sign Our Prompt',
        value: false
      }),
      new SingleCheckboxControl({
        key: 'allowAccessTokensViaBrowser',
        label: 'Allow Access Tokens Via Browser',
        value: false
      }),
      new TextboxControl({
        key: 'registrationDate',
        label: 'Registration Date',
        value: '--',
      }),
    ];

    this.checkboxes = [
      // Fix this if only 1 checkbox is necessary for example.

      // {
      //   key: 'requireConsent',
      //   label: 'Require Consent',
      //   options: [
      //     { label: 'JS', value: true, id: 1222 },
      //   ]
      // },
      {
        key: 'frameworks',
        label: 'Frameworks',
        options: [
          { label: 'JS', value: true, id: 1222 },
          { label: 'CSS', value: false, id: 2 }
        ]
      },
      {
        key: 'watchbrands',
        label: 'Watch brands',
        options: [
          { label: 'Seiko', value: true, id: 12 },
          { label: 'Rolex', value: false, id: 21 }
        ]
      },
      {
        key: 'carbrands',
        label: 'Car brands',
        options: [
          { label: 'BMW', value: true, id: 1 },
          { label: 'Mercedes', value: false, id: 2 }
        ]
      }
    ];
  }
}
