<ion-content class="ion-padding-top">
  <ion-toolbar>
    <ion-title>Records</ion-title>
  </ion-toolbar>

  <ion-refresher slot="fixed" (ionRefresh)="doRefresh($event)">
    <ion-refresher-content></ion-refresher-content>
  </ion-refresher>

  <div *ngIf="loading" class="ion-text-center ion-padding">
    <ion-spinner></ion-spinner>
    <p>Loading records...</p>
  </div>

  <div class="table-container" *ngIf="!loading && items.length > 0">
    <table class="data-table">
      <thead>
        <tr>
          <th *ngFor="let col of columns" 
              [class.sortable]="col.sortable"
              (click)="onSort(col)">
            {{ col.header }}
            <ion-icon 
              *ngIf="col.sortable" 
              [name]="sortField === col.field ? 
                     (sortDirection === 'asc' ? 'arrow-up' : 'arrow-down') : 
                     'arrow-up'"
              [class.active]="sortField === col.field">
            </ion-icon>
          </th>
          <th class="actions-column">Actions</th>
        </tr>
      </thead>
      <tbody>
        <tr *ngFor="let item of items">
<% fields.forEach(function(field) { -%>
          <td>{{ item.<%= h.toCamelCase(field) %> || '-' <% if (field.includes('_at')) { %> | date:'medium' <% } else if (field.toLowerCase().includes('status') || field.toLowerCase().includes('type') || field.toLowerCase().includes('category')) { %> | titlecase <% } %> }}</td>
<% }); -%>
          <td class="actions-column">
            <ion-buttons>
              <ion-button (click)="openFormModal(item)" fill="clear" color="primary">
                <ion-icon slot="icon-only" name="create-outline"></ion-icon>
              </ion-button>
              <ion-button (click)="deleteItem(item)" fill="clear" color="danger">
                <ion-icon slot="icon-only" name="trash-outline"></ion-icon>
              </ion-button>
            </ion-buttons>
          </td>
        </tr>
      </tbody>
    </table>

    <div class="pagination-controls ion-padding-top ion-text-center">
      <ion-button 
        fill="clear"
        [disabled]="!canGoPrevious"
        (click)="previousPage()">
        <ion-icon slot="icon-only" name="chevron-back"></ion-icon>
        Previous
      </ion-button>

      <div class="pagination-info">
        <span>
          Page {{ currentPage }} of {{ totalPages }}
          ({{ pagination.totalCount }} total)
        </span>
      </div>
      
      <ion-button 
        fill="clear"
        [disabled]="!canGoNext"
        (click)="nextPage()">
        Next
        <ion-icon slot="icon-only" name="chevron-forward"></ion-icon>
      </ion-button>
    </div>
  </div>

  <div *ngIf="!loading && items.length === 0" class="empty-state">
    <ion-icon name="documents-outline"></ion-icon>
    <h2>No Records Found</h2>
    <p>Click the + button to add your first record</p>
  </div>

  <ion-fab slot="fixed" vertical="bottom" horizontal="end">
    <ion-fab-button (click)="openFormModal()">
      <ion-icon name="add"></ion-icon>
    </ion-fab-button>
  </ion-fab>
</ion-content>

<ion-modal #formModal>
  <ng-template>
    <ion-header>
      <ion-toolbar>
        <ion-title>{{ isEditing ? 'Edit' : 'Add' }} Record</ion-title>
        <ion-buttons slot="end">
          <ion-button (click)="formModal.dismiss()">
            <ion-icon name="close"></ion-icon>
          </ion-button>
        </ion-buttons>
      </ion-toolbar>
    </ion-header>

    <ion-content class="ion-padding">
      <form [formGroup]="form" (ngSubmit)="onSubmit()">
        <ion-list>
<% fieldsWithTypes.forEach(function(field) { 
  if (['id', 'created_at', 'updated_at'].includes(field.name)) return;
  
  let inputType;
  let component = 'ion-input';
  let extraAttributes = '';
  
  // Check if this field is an enum by looking at the field definition
  const isEnum = field.type === 'String' && field.enumValues && field.enumValues.length > 0;
  
  switch(field.type) {
    case 'Integer':
    case 'Float':
      inputType = 'number';
      extraAttributes = field.type === 'Float' ? ' step="0.01"' : '';
      break;
    case 'Boolean':
      component = 'ion-toggle';
      break;
    case 'Date':
      component = 'ion-datetime';
      extraAttributes = ' presentation="date"';
      break;
    case 'Time':
      component = 'ion-datetime';
      extraAttributes = ' presentation="time"';
      break;
    case 'DateTime':
      component = 'ion-datetime';
      break;
    case 'String':
      if (isEnum) {
        component = 'ion-select';
      } else if (field.name.toLowerCase().includes('password')) {
        inputType = 'password';
      } else if (field.name.toLowerCase().includes('email')) {
        inputType = 'email';
      } else if (field.name.toLowerCase().includes('phone')) {
        inputType = 'tel';
      } else if (field.name.toLowerCase().includes('url') || field.name.toLowerCase().includes('website')) {
        inputType = 'url';
      } else if (field.name.toLowerCase().includes('color')) {
        inputType = 'color';
      } else {
        inputType = 'text';
      }
      break;
    default:
      inputType = 'text';
  }
-%>
          <ion-item>
            <ion-label position="stacked"><%= h.capitalize(field.name.replace(/_/g, ' ')) %></ion-label>
<% if (component === 'ion-select') { -%>
            <ion-select formControlName="<%= h.toCamelCase(field.name) %>" placeholder="Select <%= field.name.replace(/_/g, ' ').toLowerCase() %>">
<% if (isEnum && field.enumValues) { -%>
<% field.enumValues.forEach(function(value) { -%>
              <ion-select-option value="<%= value %>"><%= h.capitalize(value) %></ion-select-option>
<% }); -%>
<% } -%>
            </ion-select>
<% } else if (component === 'ion-toggle') { -%>
            <ion-toggle formControlName="<%= h.toCamelCase(field.name) %>"></ion-toggle>
<% } else if (component === 'ion-datetime') { -%>
            <ion-datetime 
              formControlName="<%= h.toCamelCase(field.name) %>"
              prefer-wheel="true"
              size="cover"
<% if (field.type === 'Date') { -%>
              presentation="date"
              display-format="MMM DD, YYYY"
              picker-format="MMM DD, YYYY"
              [firstDayOfWeek]="1"
              class="date-picker"
<% } else if (field.type === 'Time') { -%>
              presentation="time"
              display-format="HH:mm"
              picker-format="HH:mm"
              class="time-picker"
<% } else if (field.type === 'DateTime') { -%>
              presentation="date-time"
              display-format="MMM DD, YYYY HH:mm"
              picker-format="MMM DD, YYYY HH:mm"
              [firstDayOfWeek]="1"
              class="datetime-picker"
<% } -%>
              style="--background: var(--ion-color-light); --wheel-highlight-background: var(--ion-color-primary-tint); min-height: 150px; max-height: 150px;"
            ></ion-datetime>
<% } else { -%>
            <<%= component %> type="<%= inputType %>"<%= extraAttributes %> formControlName="<%= h.toCamelCase(field.name) %>" placeholder="Enter <%= field.name.replace(/_/g, ' ').toLowerCase() %>"></<%= component %>>
<% } -%>
            <ion-note color="danger" *ngIf="form.get('<%= h.toCamelCase(field.name) %>')?.errors?.['required'] && form.get('<%= h.toCamelCase(field.name) %>')?.touched">
              <%= h.capitalize(field.name.replace(/_/g, ' ')) %> is required
            </ion-note>
          </ion-item>
<% }); -%>

<%# Add relationships section %>
<% if (relationships && relationships.length > 0) { -%>
<% relationships.forEach(function(rel) { -%>
          <ion-item>
            <ion-label position="stacked"><%= h.capitalize(rel.name) %></ion-label>
            <ion-select formControlName="<%= h.toCamelCase(rel.name + 'Id') %>" 
                      placeholder="Select <%= rel.name.toLowerCase() %>"
                      (ionChange)="on<%= h.capitalize(rel.name) %>Change($event)">
              <ion-select-option *ngFor="let item of <%= rel.name.toLowerCase() %>s" 
                               [value]="item.id">
                {{ item.name }}
              </ion-select-option>
            </ion-select>
            <ion-note color="danger" *ngIf="form.get('<%= h.toCamelCase(rel.name + 'Id') %>')?.errors?.['required'] && form.get('<%= h.toCamelCase(rel.name + 'Id') %>')?.touched">
              <%= h.capitalize(rel.name) %> is required
            </ion-note>
          </ion-item>
<% }); -%>
<% } -%>
        </ion-list>

        <div class="ion-padding">
          <div class="button-group">
            <ion-button expand="block" type="button" fill="outline" (click)="formModal.dismiss()">
              Cancel
            </ion-button>
            <ion-button expand="block" type="submit" [disabled]="!form.valid">
              {{ isEditing ? 'Update' : 'Create' }}
            </ion-button>
          </div>
        </div>
      </form>
    </ion-content>
  </ng-template>
</ion-modal> 